Как узнать предпочтительную ширину отображения (в столбцах) символов Юникода?

Например, в разных кодировках UnicodeUTF-16LE или жеUTF-8,символ может занимать 2 или 3 байта. Многие приложения Unicode не заботятся о ширине отображения символов Unicode, так как они все латинские буквы. Например, в80текст столбца, который должен содержать40 Китайские иероглифы или80 Буквы латинского алфавита в одной строке, но большинство приложений (таких как Eclipse, Notepad ++ и все известные текстовые редакторы, осмелюсь, если есть какое-либо хорошее исключение) просто считают каждый китайский символ на 1 ширину латинской буквой. Это, безусловно, делает формат результата некрасивым и не выровненным.

Например, ширина табуляции 8 получит следующий ужасный результат (считайте весь Юникод как 1 ширину экрана):

apple   10
banana  7
苹果      6
猕猴桃     31
pear    16

Тем не менее, ожидаемый формат (считать каждый китайский символ как 2 ширины):

apple   10
banana  7
苹果    6
猕猴桃  31
pear    16

Неправильный расчет ширины отображения символов делает эти редакторы совершенно бесполезными при выравнивании табуляции, переносе строк и переформатировании абзацев.

Хотя ширина символа может варьироваться в зависимости от шрифта, но во всех случаях терминального шрифта фиксированного размера китайский символ всегда имеет двойную ширину. То есть, несмотря на шрифт, каждый китайский символ предпочтительно отображать с шириной 2.

Одним из решений является то, что я могу получить правильную ширину, преобразовав кодировку вGB2312, вGB2312 кодирование каждого китайского символа занимает 2 байта. однако некоторые символы Unicode не существуют в кодировке GB2312 (илиGBK набор символов). И вообще, не очень хорошая идея вычислять ширину дисплея из закодированного размера в байтах.

Чтобы просто вычислить все символы в Unicode в диапазоне (\u0080..\uFFFF), поскольку ширина 2 также не является правильной, поскольку в диапазоне также имеется много символов шириной 1.

Также сложно вычислить ширину отображения арабских и корейских букв, потому что они строят слово / символ по произвольному количеству кодовых точек Unicode.

Таким образом, ширина отображения кодовой точки Unicode может быть не целым числом, я считаю, что это нормально, на практике они могут быть основаны на целых числах, по крайней мере, лучше, чем ничего.

Итак, есть ли какой-либо атрибут, связанный с предпочтительной шириной отображения символа в стандарте Unicode? Или какая-нибудь функция библиотеки Java для вычисления ширины экрана?

Ответы на вопрос(5)

Ваш ответ на вопрос