Представление utf8string
Добрый вечер (утро\ночь). Может кто-нибудь знает (можно и линки) какое внутренне представление в Delphi переменных типа utf8string?
Код:
UTF8String = type string;
кириллицу - нет. В чем же заковыка?
Код:
var s1,s2:utf8string;
st1,st2:string;
i:byte;
begin
st1:='abc';
st2:='абв';
s1:=ansiToUtf8(st1);
s2:=ansiToUtf8(st2);
s1:=s1+s2;
for i:=1 to length(s1) do
begin
showmessage(utf8ToAnsi(s1));
end;
end;
st1,st2:string;
i:byte;
begin
st1:='abc';
st2:='абв';
s1:=ansiToUtf8(st1);
s2:=ansiToUtf8(st2);
s1:=s1+s2;
for i:=1 to length(s1) do
begin
showmessage(utf8ToAnsi(s1));
end;
end;
Что-то на обычный string не очень похоже. Возможно #208 используется как индикатор того, что дальше идет национальный символ (в нашем случае кириллический), иначе как можно объяснить, что ни #208, ни ,напирмер, #176 поотдельности не отображаются.
P.S. "индикатор" 208 соответствует символам от "А" до "п"; разница с соответствующими ASCII кодами равна 48.
"индикатор" 209 соответствует символам от "р" до "я"; разница с соответствующими ASCII кодами равна 112, для "ё" равна 39.
Цитата: Rusd
Но тут проблемка: showmessage будет показывать символы a,b,c, а кириллицу - нет. В чем же заковыка?
UTF-8 является кодировкой с переменной длиной символа, и рассматривать строку как массив нельзя - можно попасть в "середину" кода.
В Винде, кстати, есть функции CharNext и CharPrev, работающие для восточно-азиатских кодировок, постороенных по тому же принципу, что и UTF-8.
Уже разобрался, но все равно спасибо.