Как узнать предпочтительную ширину отображения (в столбцах) символов Юникода?
Например, в разных кодировках 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 для вычисления ширины экрана?