WideChar имеет размер 2 байта, и содержит один UNICODE символ в кодировке UTF-16."
На сколько я понимаю, кодировка UTF-16 означает что один символ может быть закодирован либо 2 либо 4 байтами. Соответственно двухбайтный WideChar - это что-то такое неполноценное, обречено на глюки? Зачем вообще нужен этот WideChar?
https://ru.m.wikipedia.org/wiki/UTF-16 Раздел UTF-16 в Windows, т.е. всё юникодное winapi это utf16le которое названо widechar.
utf8, utf16le, utf16be, utf32le, utf32be, ucs2, ucs4, был ещё utf7, прост не договорились))
Не понял почему указание порядка байтов позволяет уместить все юникодные символы в 2 байта.
WideString - это переименованный Microsoft OLE2 BSTR и используется почти во всех COM API, так что без него будет очень плохо.
Кстати, про AnsiChar в FPC и даже в Delphi справедливо все то же самое. Нет никаких гарантий, что любая буква в него влезет. То есть, при использовании SBCS в Дельфи это получится, но от Дельфи не зависит MBCS или SBCS выбрал пользователь. https://learn.microsoft.com/en-gb/cpp/c-runtime-library/sbcs-and-mbcs-data-types?view=msvc-170 Так что остаётся только UCS4String и UCS4Char, но... Надолго ли? Сегодняшний UTF-16 во времена WinNT3 (когда и появился WideChar) был вполне себе кошерным UCS2, и тогда он ещё гарантировал 1:1 буквы к ячейкам. Почему и попал в ту же Java. Но потом его расширили. Когда-нибудь и UCS4 расширят, когда все эмодзи перестанут влезать :-)
Обсуждают сегодня