Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Представление utf8string

7.0K
01 марта 2007 года
Rusd
88 / / 26.08.2006
Добрый вечер (утро\ночь). Может кто-нибудь знает (можно и линки) какое внутренне представление в Delphi переменных типа utf8string?
257
01 марта 2007 года
kosfiz
1.6K / / 18.09.2005
смотрим system.pas и ищем в нем utf8string и находим следующее:
 
Код:
UTF8String = type string;
7.0K
02 марта 2007 года
Rusd
88 / / 26.08.2006
Похож на string? ок. Но тут проблемка: showmessage будет показывать символы a,b,c, а

кириллицу - нет. В чем же заковыка?

Код:
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;
7.0K
02 марта 2007 года
Rusd
88 / / 26.08.2006
Length(s1) и Length(st1+st2) дают разные значения. Перед кириллическими символами стоят символы с кодом 208, т.е. выходит что s1[1]='a'; s1[2]='b'; s1[3]='c'; ord(s1[4])=208; ord(s1[5])=176; ord(s1[6])=208; ord(s1[7])=177; ord(s1[8])=208; ord(s1[9])=178;
Что-то на обычный string не очень похоже. Возможно #208 используется как индикатор того, что дальше идет национальный символ (в нашем случае кириллический), иначе как можно объяснить, что ни #208, ни ,напирмер, #176 поотдельности не отображаются.

P.S. "индикатор" 208 соответствует символам от "А" до "п"; разница с соответствующими ASCII кодами равна 48.
"индикатор" 209 соответствует символам от "р" до "я"; разница с соответствующими ASCII кодами равна 112, для "ё" равна 39.
10
02 марта 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: Rusd
Но тут проблемка: showmessage будет показывать символы a,b,c, а кириллицу - нет. В чем же заковыка?


UTF-8 является кодировкой с переменной длиной символа, и рассматривать строку как массив нельзя - можно попасть в "середину" кода.

В Винде, кстати, есть функции CharNext и CharPrev, работающие для восточно-азиатских кодировок, постороенных по тому же принципу, что и UTF-8.

7.0K
02 марта 2007 года
Rusd
88 / / 26.08.2006
Уже разобрался, но все равно спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог