Другие языки программирования и технологии

Какой профит для кириллицы при использовании UTF-16 вместо UTF-8?

Henrikas Pocius
Henrikas Pocius
3 937
Профит в ускорении операций, за счёт фиксированного размера символов. Например, если нужно взять N-ый символ из строки, то в UTF-16 достаточно просто взять два байта по смещению N*2. А в UTF-8 придётся в цикле перебирать строку, проверяя длину каждого символа.
Азат(Цветы) Галяутдинов
Азат(Цветы) Галяутдинов
24 295
Лучший ответ
Виктор Тихомиров в вики другая информация.
8битную ютф можно было модифицировать таким образом чтобы она тоже была фиксированного размера, а выбрана была именно 16, просто люди перестали экономить место вот и всё.
Henrikas Pocius Это если точно знать, что в тексте только латиница и кириллица?
Абсолютно никакого. Когда кодировка UTF-16 создавалась, она казалась стандартизаторам хорошей идеей. Но время шло, код-во символов в Unicode росло и сейчас UTF-16 превратилась в химеру с переменной длинной символов (часть символов - два байта, часть - четыре; потому East RX совершенно не прав, говоря об ускорении операций) и уродливыми правилами определения длины символа и декодирования 4-байтных символов.

В современном мире имеет смысл использовать либо UTF-8, либо UTF-32. Но, к сожалению, исторически сложилось, что UTF-16 применяется много где.
Henrikas Pocius А если точно знать, что в тексте только латиница и кириллица? То есть, не более 2 байтов на символ.
Виктор Кущ Я имел в виду только простой текст, без экзотических символов (раз в вопросе речь о кириллице). В этом случае будет именно как я написал - в UTF-8 буквы будут по 2 байта, а пробелы, цифры и знаки препинания - по 1 байту, тогда как в UTF-16 все символы будут одинаковые, по 2 байта.
при вызове системных функций винды не будет перекодировки
под пингвинами выгода со знаком минус
Первая версия Юникода (1991 г.) представляла собой 16-битную кодировку с фиксированной шириной символа; общее число разных символов было 216 (65 536). Во второй версии Юникода (1996 г.) было решено значительно расширить кодовую область; для сохранения совместимости с теми системами, где уже был реализован 16-битный Юникод, и была создана UTF-16. Область 0xD800—0xDFFF, отведённая для суррогатных пар, ранее принадлежала к области «символов для частного использования».

Поскольку в UTF-16 можно отобразить 220+216−2048 (1 112 064) символов, то это число и было выбрано в качестве новой величины кодового пространства Юникода.
Игорь Бахматов "Поскольку в UTF-16 можно отобразить 220+216−2048 (1 112 064)"

В UTF-8 нельзя закодировать все эти символы?