Почему создатели систем Windows и Linux выбрали разные способы поддержки Unicode? - PullRequest
6 голосов
/ 28 мая 2010

Насколько я знаю, Linux выбрал обратную совместимость UTF-8, тогда как Windows добавила совершенно новые API-функции для UTF-16 (заканчивающиеся на "W"). Могут ли эти решения быть другими? Какой из них оказался лучше?

Ответы [ 2 ]

11 голосов
/ 28 мая 2010

UTF-16 - в значительной степени потеря, худшая из двух миров. Он не является компактным (для типичного случая символов ASCII) и не отображает каждую единицу кода на символ. На самом деле это никого не сильно укусило, поскольку персонажи вне Базовой многоязычной плоскости по-прежнему используются редко, но это ужасно.

POSIX (Linux et al) также имеет некоторые API w, основанные на типе wchar_t. На платформах, отличных от Windows, это обычно соответствует UTF-32, а не UTF-16. Который хорош для легкой манипуляции со струнами, но невероятно раздут.

Но API в памяти не так уж важны. Гораздо более сложная задача - хранение файлов и протоколы «по проводам», когда данные обмениваются между приложениями с разными традициями кодировки.

Здесь компактность превосходит простоту индексации; UTF-8 однозначно является лучшим форматом для этого, и слабая поддержка UTF-8 в Windows вызывает реальные трудности. Windows - последняя современная операционная система, которая все еще имеет специфичные для локали кодировки по умолчанию; все остальные перешли на UTF-8 по умолчанию.

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

В старые времена, когда разрабатывался WinNT, мы думали, что UCS-2 это для Unicode. Там не будет ничего за пределами 16-битного диапазона символов. Каждый будет использовать UCS-2 в памяти, и, естественно, будет проще сохранить этот контент прямо из памяти. Вот почему Windows называет этот формат «Unicode», и до сих пор до сих пор называет UTF-16LE просто «Unicode» в пользовательском интерфейсе, как блоки сохранения, несмотря на то, что он полностью вводит в заблуждение.

UTF-8 даже не был стандартизирован до Unicode 2.0 (наряду с расширенным диапазоном символов и суррогатами, которые сделали UTF-16 тем, чем он является сегодня). К тому времени Microsoft перешла на WinNT4, и было уже слишком поздно менять стратегию. Короче говоря, Microsoft не повезло с нуля разрабатывать новую ОС в то время, когда Unicode только начинал развиваться.

5 голосов
/ 28 мая 2010

Windows решила поддерживать Unicode с UTF-16 и сопутствующими функциями Ascii / Unicode WAAAAAAY еще в начале 90-х (Windows NT 3.1 вышла в 1993 году), еще до того, как в Linux появилось понятие поддержки Unicode.

Linux может извлечь уроки из лучших практик, построенных на Windows и других Unicode-совместимых платформах.

Сегодня многие согласятся с тем, что UTF-8 является лучшей кодировкой по размеру, если только вы не знаете, что вам абсолютно необходимо иметь дело с большим количеством двухбайтовых символов - исключительно - там, где UTF-16 более экономно использует пространство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...