Первые люди, использовавшие UTF-8 на платформе Unix объяснил :
Стандарт Unicode [тогда в версии 1.1]
определяет
адекватный набор символов, но
необоснованное представление [UCS-2]. Говорится
что все символы имеют ширину 16 бит [больше не соответствует действительности]
и передаются и хранятся в 16-битных единицах.
Это также резервирует пару
символов (шестнадцатеричный FFFE и
FEFF) для определения порядка байтов в
передаваемый текст, требующий состояния в
поток байтов. (Юникод
Консорциум думал о файлах, а не
трубы.) Чтобы принять эту кодировку, мы
пришлось бы конвертировать весь текст
вход в и из плана 9 между
ASCII и Unicode, которые не могут быть
сделанный. В рамках одной программы, в
команда всего его ввода и вывода,
можно определить символы как
16-битные величины; в контексте
сетевая система с сотнями
приложения на различных машинах
разные производители [курсив мой], это
невозможно.
Часть, выделенная курсивом, в меньшей степени относится к системам Windows, которые предпочитают монолитные приложения (Microsoft Office), разнородные машины (все это x86 и, следовательно, little-endian) и одного поставщика ОС.
А философия Unix, заключающаяся в том, чтобы иметь маленькие, специализированные программы, означает, что меньшее количество из них нуждается в серьезных манипуляциях с персонажами.
Источник для наших инструментов и
приложения уже были
преобразован для работы с латиницей-1, так что
был «8-битным сейфом», но преобразование
стандарту Юникод и UTF [-8]
более вовлечен. Некоторые программы не нужны
изменить вообще: cat
, например,
интерпретирует свои аргументные строки,
доставлено в UTF [-8], как имена файлов
что он проходит без толкования
open
системный вызов, а затем просто копирует
байты от его входа до его выхода; Это
никогда не принимает решения на основе
значения байтов ... Большинство программ,
однако, необходимы скромные изменения.
... На самом деле мало инструментов для работы
на рунах [кодовые точки Unicode]
внутри; как правило, они нуждаются
только искать последний слеш в
Имя файла и аналогичные тривиальные задачи.
Из исходных программ 170 C ... только 23
теперь содержит слово Rune
.
Программы, которые хранят руны
внутренне в основном те, чьи
смысл существования персонажа
манипулирование: sam (текстовый редактор),
sed
, sort
, tr
, troff
, 8½
(окно
эмулятор системы и терминала) и так
на. Чтобы решить, следует ли вычислять, используя
руны или байтовые строки в кодировке UTF
требует балансировки стоимости
преобразование данных при чтении и
написано против стоимости конвертации
соответствующий текст по запросу. Для программ
такие как редакторы, которые работают долго
с относительно постоянным набором данных,
руны - лучший выбор ...
UTF-32, с непосредственно доступными кодовыми точками, действительно более удобен, если вам нужны такие свойства символов, как категории и сопоставления регистров.
Но Widechars неудобно использовать в Linux по той же причине, что UTF-8 неудобно использовать в Windows. GNU libc не имеет функции _wfopen
или _wstat
.