В Delphi S[i]
- это char
aka widechar
.Но это не «символ» Unicode, это кодированное значение UTF-16 в 16 битах (2 байта).В предыдущем веке, т.е. до 1996 года, Unicode был 16-битным, но это уже не так!Пожалуйста, внимательно прочитайте FAQ по Unicode .
. Вам может понадобиться несколько widechar
, чтобы иметь целую кодовую точку Unicode = более или менее то, что мы обычно называем «символом».И даже это может быть неправильно, если используются диакритические знаки.
UTF-16 использует одну 16-битную кодовую единицу для кодирования наиболее распространенных 63K-символов и пару 16-битных кодовых единиц, называемых суррогатами, для кодирования 1M менее часто используемых символов вUnicode.
Изначально Unicode разрабатывался как чисто 16-битная кодировка, предназначенная для представления всех современных сценариев.(Древние сценарии должны были быть представлены с использованием символов личного пользования.)
Со временем, особенно после добавления более 14 500 составных символов для совместимости с устаревшими наборами, стало ясно, что 16-разрядных не достаточно длясообщество пользователей.Из этого возникло UTF-16.
см. UTF-16 FAQ
Для правильного декодирования кодовых точек Unicode в Delphi, см. Обнаружение и получениекодовые точки и суррогаты строки Delphi (ссылка @LURD в комментариях)