runewalsh писал(а):Просадки скорости по сравнению даже с UTF-32 (при итерировании, а не случайном доступе) не наблюдается — сложность декодирования компенсируется компактностью данных.
У UTF-16 нет объективных преимуществ перед UTF-8. Если забивать на суррогатные пары, то a) о поддержке юникода речи идти не может, b) называй вещи своими именами, это кодировка UCS-2.
У UTF-8 нет объективных преимуществ перед UTF-16 или UTF-32. Для алгоритма общего случая просадка скорости работы с UTF-8 достигает порядков, по сравнению со скоростью работы UTF-32. Хотя для UTF-8 можно найти частный случай задачи, в которой он отработает быстрее.
Добавлено спустя 8 минут 7 секунд:
runewalsh писал(а): называй вещи своими именами, это кодировка UCS-2.
Q: What is the difference between UCS-2 and UTF-16?
A: UCS-2 is obsolete terminology which refers to a Unicode implementation up to Unicode 1.1, before surrogate code points and UTF-16 were added to Version 2.0 of the standard. This term should now be avoided.
UCS-2 does not define a distinct data format, because UTF-16 and UCS-2 are identical for purposes of data exchange. Both are 16-bit, and have exactly the same code unit representation.
Sometimes in the past an implementation has been labeled "UCS-2" to indicate that it does not support supplementary characters and doesn't interpret pairs of surrogate code points as characters. Such an implementation would not handle processing of character properties, code point boundaries, collation, etc. for supplementary characters. [AF]