CleverMouse wrote:У меня есть встречное предложение
Но ведь в этой теме обсуждается конкретно SysFn2. Разве есть необходимость с клавиатуры вводить что-то за пределами
https://en.wikipedia.org/wiki/Plane_%28 ... gual_Plane ?
Ну а за UTF-16 я потому что в ней символ может состоять или из 2-ух, или из 4-ёх байтов. В то время как в UTF-8 4 варианта(1|2|3|4). Это дополнительные проверки в коде, меньше производительность. Хуже, наверное, только EBCDIC.
В плане совместимости, файловые функции уже давно поддерживают UTF-16.
Вообще, в плане эффективности, как мне кажется, UCS-2(2 байта на символ) будет ещё лучше. Проще и быстрее строковые функции. Можно элементарно обратиться к i-ому символу, а не парсить всё до него как в UTF-8\16.
Вот смотри, пусть есть StrLen для однобайтной кодировки
Code: Select all
mov edi, Str
mov ecx, $FFFFFFFF
xor eax, eax
repne scasb
mov eax, $FFFFFFFF
sub eax, ecx
Как изменится код для UCS-2? Очень просто, изменится только scasb на scasw
Code: Select all
mov edi, Str
mov ecx, $FFFFFFFF
xor eax, eax
repne scasw
mov eax, $FFFFFFFF
sub eax, ecx
А для UTF-8/16 надо больше городить, будет гораздо больше проверок. Это даже если реально там символы помещаются в рамки UCS-2.
Я вовсе не хочу сказать, что надо отказываться от поддержки UTF-8\16. Но всему должно быть своё место.
Снова скажу, что в основном всё же используется Basic Multilingual Plane. А если нужно будет перекодировать, то пусть в библиотеке будут функции UCS2<->UTF16, UCS2<->UTF8, UTF16<->UTF8.