В разных кодировках Юникода, например UTF-16le или UTF-8, символ может занимать 2 или 3 байта. Многие приложения Unicode не заботятся о ширине отображения символов Unicode, так же как и все латинские буквы. Например, в тексте 80 -column, который должен содержать китайские символы 40 или 80 латинские буквы в одной строке, но большинство приложений (например, Eclipse, Notepad ++ и все известные текстовые редакторы, я смею, если есть какое-то хорошее исключение) просто пересчитайте каждый китайский символ как 1 ширину как латинскую букву. Это, безусловно, делает формат результата уродливым и неприсоединенным.
Например, ширина табуляции 8 будет получать следующий уродливый результат (считать все Unicode как 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). И, вообще говоря, не рекомендуется вычислять ширину экрана из закодированного размера в байтах.
Просто вычислить весь символ в Юникоде в диапазоне (\u0080
.. \uFFFF
), так как 2-кратная также неверна, потому что в этом диапазоне также много символов ширины 1 ширины.
Также трудно вычислить ширину отображения арабских букв и корейских букв, поскольку они строят слово/символ произвольным числом кодовых точек Unicode.
Таким образом, ширина отображения кода кода Unicode может быть не целочисленным, я считаю, что это нормально, их можно заземлить на целые на практике, по крайней мере, лучше, чем ни один.
Итак, есть ли какой-либо атрибут, связанный с предпочтительной шириной экрана char в стандарте Unicode? Или любую библиотечную функцию Java для вычисления ширины экрана?