Как перекодировать из 1251 в utf8 "на лету"?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Сообщение tria » 08.06.2007 15:08:02

>Джентельмен.
Спасибо, пока что на мыло я ничего слать не буду. У меня есть еще задача перекодирования текста в файле и строковых констант....

Что интересного я нашел.
Лазарус 0.9.22
Функция AnsiToUtf8 в Виндоуз работает, в Линуксе - не работает :)

Реализация этой функции, выдранная из Делфи в Лазаре опять же в Видоуз работает, в Линуксе - нет.

Я так думаю, проблема где-то в преобразовании string->WideString которе неявно делается. сначала в utf16, а потом в utf8:( ).

Не подскажете ли мне, где надо смотреть реализацию данного преобразования?
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение Alexander » 08.06.2007 23:59:08

tria писал(а):Функция AnsiToUtf8 в Виндоуз работает, в Линуксе - не работает


В каком смысле не работает ? У меня работает.

Код: Выделить всё
  var
      s : string;

begin

s := ansitoutf8('АБВГДЕЁЖ');

WriteLn(s);

s := utf8toansi(s);

WriteLn(s);

end.


Такой код вначале выдаст кракозябры утф8, а потом снова нормальный текст.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 690
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Attid » 09.06.2007 00:05:36

Alexander
у тя наверно svn версия, там что-то правили же когда
shade
поднимал тему с кодировками.

tria
у меня к тебе 2 личных сообщения лежит не прочитаных уже 2 недели, ткни ссылочку наверху буть добр. =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Alexander » 09.06.2007 14:56:54

Attid писал(а):Alexander

у тя наверно svn версия, там что-то правили же когда


Не, обычная 2.0.4, из исходников собирал релиз. Без патчей и свн.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 690
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение debi12345 » 09.06.2007 16:40:59

В выводе shell-команды "locale -a" есть ru_RU.utf8 ?
( поддержка данной локали в LibC, без нее ICONV бессилен ).

Если нет - добавьте.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение tria » 12.06.2007 10:54:04

В общем то оказалось, что написать функциию самому гораздо проще, чем найти готовое решение:

Код: Выделить всё
function Tria_AnsiToUtf8(s:string):string;
var i,n:integer;
begin
  Result:='';
  For i:=1 to Length(s) do begin
    n:=ord(s[i]);
    Case n of //One byte and russion symbols
    1..127: Result:=Result+s[i];
    192..239: Result:=Result+#208+Char(n-48); //'À'..'ï'
    240..255: Result:=Result+#209+Char(n-112); //'ð'..'ÿ'
    Else
      Case n of //Enother not impotent symbols
      128: Result:=Result+#208+#130; //€
      129: Result:=Result+#208+#131; //
      130: Result:=Result+#226+#128+#154; //‚
      131: Result:=Result+#209+#147; //ƒ
      132: Result:=Result+#226+#128+#158; //„
      133: Result:=Result+#226+#128+#166; //…
      134: Result:=Result+#226+#128+#160; //†
      135: Result:=Result+#226+#128+#161; //‡
      136: Result:=Result+#226+#130+#172; //ˆ
      137: Result:=Result+#226+#128+#176; //‰
      138: Result:=Result+#208+#137; //Š
      139: Result:=Result+#226+#128+#185; //‹
      140: Result:=Result+#208+#138; //Œ
      141: Result:=Result+#208+#140; //
      142: Result:=Result+#208+#139; //Ž
      143: Result:=Result+#208+#143; //
      144: Result:=Result+#209+#146; //
      145: Result:=Result+#226+#128+#152; //‘
      146: Result:=Result+#226+#128+#153; //’
      147: Result:=Result+#226+#128+#156; //“
      148: Result:=Result+#226+#128+#157; //”
      149: Result:=Result+#226+#128+#162; //•
      150: Result:=Result+#226+#128+#147; //–
      151: Result:=Result+#226+#128+#148; //—
      152: Result:=Result+#194+#152; //˜
      153: Result:=Result+#226+#132+#162; //™
      154: Result:=Result+#209+#153; //š
      155: Result:=Result+#226+#128+#186; //›
      156: Result:=Result+#209+#154; //œ
      157: Result:=Result+#209+#156; //
      158: Result:=Result+#209+#155; //ž
      159: Result:=Result+#209+#159; //Ÿ
      160: Result:=Result+#194+#160; // 
      161: Result:=Result+#208+#142; //¡
      162: Result:=Result+#209+#158; //¢
      163: Result:=Result+#208+#136; //£
      164: Result:=Result+#194+#164; //¤
      165: Result:=Result+#210+#144; //¥
      166: Result:=Result+#194+#166; //¦
      167: Result:=Result+#194+#167; //§
      168: Result:=Result+#208+#129; //¨
      169: Result:=Result+#194+#169; //©
      170: Result:=Result+#208+#132; //ª
      171: Result:=Result+#194+#171; //«
      172: Result:=Result+#194+#172; //¬
      173: Result:=Result+#194+#173; //­
      174: Result:=Result+#194+#174; //®
      175: Result:=Result+#208+#135; //¯
      176: Result:=Result+#194+#176; //°
      177: Result:=Result+#194+#177; //±
      178: Result:=Result+#208+#134; //²
      179: Result:=Result+#209+#150; //³
      180: Result:=Result+#210+#145; //´
      181: Result:=Result+#194+#181; //µ
      182: Result:=Result+#194+#182; //¶
      183: Result:=Result+#194+#183; //·
      184: Result:=Result+#209+#145; //¸
      185: Result:=Result+#226+#132+#150; //¹
      186: Result:=Result+#209+#148; //º
      187: Result:=Result+#194+#187; //»
      188: Result:=Result+#209+#152; //¼
      189: Result:=Result+#208+#133; //½
      190: Result:=Result+#209+#149; //¾
      191: Result:=Result+#209+#151; //¿
      end;//Case
    end;//Case
  end;
end;
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение Sergei I. Gorelkin » 12.06.2007 12:33:10

Хм... и это написал человек, которому iconv казался слишком медленным??
Вызывать ReallocMem на каждый символ (а именно это и происходит при операции вида s := s + 'a', если речь идет об AnsiString) - не есть хорошая идея в смысле быстродействия...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение tria » 12.06.2007 16:08:59

Sergei I. Gorelkin писал(а):Хм... и это написал человек, которому iconv казался слишком медленным??
Вызывать ReallocMem на каждый символ (а именно это и происходит при операции вида s := s + 'a', если речь идет об AnsiString) - не есть хорошая идея в смысле быстродействия...


Согласен. Со временем переделаю. Пока что мне важно, что это работает не зависимо от окружения/версий/сборок и т.п.
А когда весь код у тебя в руках - то и оптимизацией можно будет занятся...
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение tria » 12.06.2007 16:11:10

Alexander писал(а):
tria писал(а):Функция AnsiToUtf8 в Виндоуз работает, в Линуксе - не работает


В каком смысле не работает ? У меня работает.

Код: Выделить всё
  var
      s : string;

begin

s := ansitoutf8('АБВГДЕЁЖ');

WriteLn(s);

s := utf8toansi(s);

WriteLn(s);

end.


Такой код вначале выдаст кракозябры утф8, а потом снова нормальный текст.


Кракозябры - не показатель :)
Я сохранял в текстовый файл и открывал броузером.
Один и тот же код в винде давал правильный результат, а в CentOS - не поддавался распознаванию.
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение Alexander » 12.06.2007 17:09:54

Да, но ФПК то их обратно преобразует нормально. Это понятно из кода.

А почему браузер должен открывать утф8 текст ? Он вроде хтмл любит и
с указанием кодировки.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 690
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Attid » 12.06.2007 18:40:33

браузер все открывает.
хтмл это тоже текст только с гипертекстовой разметкой =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение tria » 14.06.2007 13:48:30

Переделал функцию с целью оптимизации по скорости выполнения:

Код: Выделить всё
function Tria_AnsiToUtf8(const s:string):string;
var i,n,j:integer;
begin
  SetLength(Result,Length(s)*3);
  j:=0;
  For i:=1 to Length(s) do begin
    n:=ord(s[i]);
    Case n of //One byte and russion symbols
    1..127:
      begin
        Result[j]:=s[i];
        Inc(j);
      end;
    192..239://'À'..'ï'
      begin
        Result[j]:=#208;  Inc(j);
        Result[j]:=Char(n-48);  Inc(j);
      end;
    240..255://'ð'..'ÿ'
      begin
        Result[j]:=#209;  Inc(j);
        Result[j]:=Char(n-112);  Inc(j);
      end;
    Else
      Case n of //Enother not impotent symbols
      128: begin Result[j]:=#208;  Inc(j); Result[j]:=#130;  Inc(j);  end; //€
      129: begin Result[j]:=#208;  Inc(j); Result[j]:=#131;  Inc(j);  end; //
      130: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#154;  Inc(j);  end; //‚
      131: begin Result[j]:=#209;  Inc(j); Result[j]:=#147;  Inc(j);  end; //ƒ
      132: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#158;  Inc(j);  end; //„
      133: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#166;  Inc(j);  end; //…
      134: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#160;  Inc(j);  end; //†
      135: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#161;  Inc(j);  end; //‡
      136: begin Result[j]:=#226;  Inc(j); Result[j]:=#130;  Inc(j); Result[j]:=#172;  Inc(j);  end; //ˆ
      137: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#176;  Inc(j);  end; //‰
      138: begin Result[j]:=#208;  Inc(j); Result[j]:=#137;  Inc(j);  end; //Š
      139: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#185;  Inc(j);  end; //‹
      140: begin Result[j]:=#208;  Inc(j); Result[j]:=#138;  Inc(j);  end; //Œ
      141: begin Result[j]:=#208;  Inc(j); Result[j]:=#140;  Inc(j);  end; //
      142: begin Result[j]:=#208;  Inc(j); Result[j]:=#139;  Inc(j);  end; //Ž
      143: begin Result[j]:=#208;  Inc(j); Result[j]:=#143;  Inc(j);  end; //
      144: begin Result[j]:=#209;  Inc(j); Result[j]:=#146;  Inc(j);  end; //
      145: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#152;  Inc(j);  end; //‘
      146: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#153;  Inc(j);  end; //’
      147: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#156;  Inc(j);  end; //“
      148: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#157;  Inc(j);  end; //”
      149: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#162;  Inc(j);  end; //•
      150: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#147;  Inc(j);  end; //–
      151: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#148;  Inc(j);  end; //—
      152: begin Result[j]:=#194;  Inc(j); Result[j]:=#152;  Inc(j);  end; //˜
      153: begin Result[j]:=#226;  Inc(j); Result[j]:=#132;  Inc(j); Result[j]:=#162;  Inc(j);  end; //™
      154: begin Result[j]:=#209;  Inc(j); Result[j]:=#153;  Inc(j);  end; //š
      155: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#186;  Inc(j);  end; //›
      156: begin Result[j]:=#209;  Inc(j); Result[j]:=#154;  Inc(j);  end; //œ
      157: begin Result[j]:=#209;  Inc(j); Result[j]:=#156;  Inc(j);  end; //
      158: begin Result[j]:=#209;  Inc(j); Result[j]:=#155;  Inc(j);  end; //ž
      159: begin Result[j]:=#209;  Inc(j); Result[j]:=#159;  Inc(j);  end; //Ÿ
      160: begin Result[j]:=#194;  Inc(j); Result[j]:=#160;  Inc(j);  end; // 
      161: begin Result[j]:=#208;  Inc(j); Result[j]:=#142;  Inc(j);  end; //¡
      162: begin Result[j]:=#209;  Inc(j); Result[j]:=#158;  Inc(j);  end; //¢
      163: begin Result[j]:=#208;  Inc(j); Result[j]:=#136;  Inc(j);  end; //£
      164: begin Result[j]:=#194;  Inc(j); Result[j]:=#164;  Inc(j);  end; //¤
      165: begin Result[j]:=#210;  Inc(j); Result[j]:=#144;  Inc(j);  end; //¥
      166: begin Result[j]:=#194;  Inc(j); Result[j]:=#166;  Inc(j);  end; //¦
      167: begin Result[j]:=#194;  Inc(j); Result[j]:=#167;  Inc(j);  end; //§
      168: begin Result[j]:=#208;  Inc(j); Result[j]:=#129;  Inc(j);  end; //¨
      169: begin Result[j]:=#194;  Inc(j); Result[j]:=#169;  Inc(j);  end; //©
      170: begin Result[j]:=#208;  Inc(j); Result[j]:=#132;  Inc(j);  end; //ª
      171: begin Result[j]:=#194;  Inc(j); Result[j]:=#171;  Inc(j);  end; //«
      172: begin Result[j]:=#194;  Inc(j); Result[j]:=#172;  Inc(j);  end; //¬
      173: begin Result[j]:=#194;  Inc(j); Result[j]:=#173;  Inc(j);  end; //­
      174: begin Result[j]:=#194;  Inc(j); Result[j]:=#174;  Inc(j);  end; //®
      175: begin Result[j]:=#208;  Inc(j); Result[j]:=#135;  Inc(j);  end; //¯
      176: begin Result[j]:=#194;  Inc(j); Result[j]:=#176;  Inc(j);  end; //°
      177: begin Result[j]:=#194;  Inc(j); Result[j]:=#177;  Inc(j);  end; //±
      178: begin Result[j]:=#208;  Inc(j); Result[j]:=#134;  Inc(j);  end; //²
      179: begin Result[j]:=#209;  Inc(j); Result[j]:=#150;  Inc(j);  end; //³
      180: begin Result[j]:=#210;  Inc(j); Result[j]:=#145;  Inc(j);  end; //´
      181: begin Result[j]:=#194;  Inc(j); Result[j]:=#181;  Inc(j);  end; //µ
      182: begin Result[j]:=#194;  Inc(j); Result[j]:=#182;  Inc(j);  end; //¶
      183: begin Result[j]:=#194;  Inc(j); Result[j]:=#183;  Inc(j);  end; //·
      184: begin Result[j]:=#209;  Inc(j); Result[j]:=#145;  Inc(j);  end; //¸
      185: begin Result[j]:=#226;  Inc(j); Result[j]:=#132;  Inc(j); Result[j]:=#150;  Inc(j);  end; //¹
      186: begin Result[j]:=#209;  Inc(j); Result[j]:=#148;  Inc(j);  end; //º
      187: begin Result[j]:=#194;  Inc(j); Result[j]:=#187;  Inc(j);  end; //»
      188: begin Result[j]:=#209;  Inc(j); Result[j]:=#152;  Inc(j);  end; //¼
      189: begin Result[j]:=#208;  Inc(j); Result[j]:=#133;  Inc(j);  end; //½
      190: begin Result[j]:=#209;  Inc(j); Result[j]:=#149;  Inc(j);  end; //¾
      191: begin Result[j]:=#209;  Inc(j); Result[j]:=#151;  Inc(j);  end; //¿
      end;//Case
    end;//Case
  end;

SetLength(Result,j);
end;


Если кто подкинет еще идеи, как дооптимизировать - буду благодарен.
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение Sergei I. Gorelkin » 14.06.2007 15:39:28

Ну... оба case совершенно спокойно можно объединить в один. Потом, переменную j в начале, наверное, нужно инициализировать не нулем, а единицей.
И - возможно, имеет смысл пробегать по строке два раза, первый раз вычисляя точную длину результата и вызывая SetLength только один раз. Но это сказать наверняка нельзя - нужно брать профайлер и сравнивать оба варианта.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение tria » 14.06.2007 16:40:44

Sergei I. Gorelkin писал(а):Ну... оба case совершенно спокойно можно объединить в один. Потом, переменную j в начале, наверное, нужно инициализировать не нулем, а единицей.
И - возможно, имеет смысл пробегать по строке два раза, первый раз вычисляя точную длину результата и вызывая SetLength только один раз. Но это сказать наверняка нельзя - нужно брать профайлер и сравнивать оба варианта.


Должно быть: j=1, действительно кинул с ошибкой :(
По Case.
Решил провести тестирование.
Если строка состотит только из русских символов, то быстрее работает функция с одним Case.
Если в строке есть еще и символы 128...191, то быстрее работает функция с двумя Case.

Я полагал, должно быть наоборот...
Во втором варианте разница по скорости меньше.
Наверное объединю таки все в один Case

Появится время - попробую с одним SetLength.
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение tria » 14.06.2007 16:45:38

Текущий вид функции:

Код: Выделить всё
function Tria_AnsiToUtf8(const s:string):string;
var i,n,j, Len:integer;
begin
  SetLength(Result,Length(s)*3);
  j:=1;
  For i:=1 to Length(s) do begin
    n:=ord(s[i]);
    Case n of //One byte and russion symbols
    1..127:
      begin
        Result[j]:=s[i];
        Inc(j);
      end;
    128: begin Result[j]:=#208;  Inc(j); Result[j]:=#130;  Inc(j);  end; //€
    129: begin Result[j]:=#208;  Inc(j); Result[j]:=#131;  Inc(j);  end; //
    130: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#154;  Inc(j);  end; //‚
    131: begin Result[j]:=#209;  Inc(j); Result[j]:=#147;  Inc(j);  end; //ƒ
    132: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#158;  Inc(j);  end; //„
    133: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#166;  Inc(j);  end; //…
    134: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#160;  Inc(j);  end; //†
    135: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#161;  Inc(j);  end; //‡
    136: begin Result[j]:=#226;  Inc(j); Result[j]:=#130;  Inc(j); Result[j]:=#172;  Inc(j);  end; //ˆ
    137: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#176;  Inc(j);  end; //‰
    138: begin Result[j]:=#208;  Inc(j); Result[j]:=#137;  Inc(j);  end; //Š
    139: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#185;  Inc(j);  end; //‹
    140: begin Result[j]:=#208;  Inc(j); Result[j]:=#138;  Inc(j);  end; //Œ
    141: begin Result[j]:=#208;  Inc(j); Result[j]:=#140;  Inc(j);  end; //
    142: begin Result[j]:=#208;  Inc(j); Result[j]:=#139;  Inc(j);  end; //Ž
    143: begin Result[j]:=#208;  Inc(j); Result[j]:=#143;  Inc(j);  end; //
    144: begin Result[j]:=#209;  Inc(j); Result[j]:=#146;  Inc(j);  end; //
    145: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#152;  Inc(j);  end; //‘
    146: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#153;  Inc(j);  end; //’
    147: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#156;  Inc(j);  end; //“
    148: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#157;  Inc(j);  end; //”
    149: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#162;  Inc(j);  end; //•
    150: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#147;  Inc(j);  end; //–
    151: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#148;  Inc(j);  end; //—
    152: begin Result[j]:=#194;  Inc(j); Result[j]:=#152;  Inc(j);  end; //˜
    153: begin Result[j]:=#226;  Inc(j); Result[j]:=#132;  Inc(j); Result[j]:=#162;  Inc(j);  end; //™
    154: begin Result[j]:=#209;  Inc(j); Result[j]:=#153;  Inc(j);  end; //š
    155: begin Result[j]:=#226;  Inc(j); Result[j]:=#128;  Inc(j); Result[j]:=#186;  Inc(j);  end; //›
    156: begin Result[j]:=#209;  Inc(j); Result[j]:=#154;  Inc(j);  end; //œ
    157: begin Result[j]:=#209;  Inc(j); Result[j]:=#156;  Inc(j);  end; //
    158: begin Result[j]:=#209;  Inc(j); Result[j]:=#155;  Inc(j);  end; //ž
    159: begin Result[j]:=#209;  Inc(j); Result[j]:=#159;  Inc(j);  end; //Ÿ
    160: begin Result[j]:=#194;  Inc(j); Result[j]:=#160;  Inc(j);  end; // 
    161: begin Result[j]:=#208;  Inc(j); Result[j]:=#142;  Inc(j);  end; //¡
    162: begin Result[j]:=#209;  Inc(j); Result[j]:=#158;  Inc(j);  end; //¢
    163: begin Result[j]:=#208;  Inc(j); Result[j]:=#136;  Inc(j);  end; //£
    164: begin Result[j]:=#194;  Inc(j); Result[j]:=#164;  Inc(j);  end; //¤
    165: begin Result[j]:=#210;  Inc(j); Result[j]:=#144;  Inc(j);  end; //¥
    166: begin Result[j]:=#194;  Inc(j); Result[j]:=#166;  Inc(j);  end; //¦
    167: begin Result[j]:=#194;  Inc(j); Result[j]:=#167;  Inc(j);  end; //§
    168: begin Result[j]:=#208;  Inc(j); Result[j]:=#129;  Inc(j);  end; //¨
    169: begin Result[j]:=#194;  Inc(j); Result[j]:=#169;  Inc(j);  end; //©
    170: begin Result[j]:=#208;  Inc(j); Result[j]:=#132;  Inc(j);  end; //ª
    171: begin Result[j]:=#194;  Inc(j); Result[j]:=#171;  Inc(j);  end; //«
    172: begin Result[j]:=#194;  Inc(j); Result[j]:=#172;  Inc(j);  end; //¬
    173: begin Result[j]:=#194;  Inc(j); Result[j]:=#173;  Inc(j);  end; //­
    174: begin Result[j]:=#194;  Inc(j); Result[j]:=#174;  Inc(j);  end; //®
    175: begin Result[j]:=#208;  Inc(j); Result[j]:=#135;  Inc(j);  end; //¯
    176: begin Result[j]:=#194;  Inc(j); Result[j]:=#176;  Inc(j);  end; //°
    177: begin Result[j]:=#194;  Inc(j); Result[j]:=#177;  Inc(j);  end; //±
    178: begin Result[j]:=#208;  Inc(j); Result[j]:=#134;  Inc(j);  end; //²
    179: begin Result[j]:=#209;  Inc(j); Result[j]:=#150;  Inc(j);  end; //³
    180: begin Result[j]:=#210;  Inc(j); Result[j]:=#145;  Inc(j);  end; //´
    181: begin Result[j]:=#194;  Inc(j); Result[j]:=#181;  Inc(j);  end; //µ
    182: begin Result[j]:=#194;  Inc(j); Result[j]:=#182;  Inc(j);  end; //¶
    183: begin Result[j]:=#194;  Inc(j); Result[j]:=#183;  Inc(j);  end; //·
    184: begin Result[j]:=#209;  Inc(j); Result[j]:=#145;  Inc(j);  end; //¸
    185: begin Result[j]:=#226;  Inc(j); Result[j]:=#132;  Inc(j); Result[j]:=#150;  Inc(j);  end; //¹
    186: begin Result[j]:=#209;  Inc(j); Result[j]:=#148;  Inc(j);  end; //º
    187: begin Result[j]:=#194;  Inc(j); Result[j]:=#187;  Inc(j);  end; //»
    188: begin Result[j]:=#209;  Inc(j); Result[j]:=#152;  Inc(j);  end; //¼
    189: begin Result[j]:=#208;  Inc(j); Result[j]:=#133;  Inc(j);  end; //½
    190: begin Result[j]:=#209;  Inc(j); Result[j]:=#149;  Inc(j);  end; //¾
    191: begin Result[j]:=#209;  Inc(j); Result[j]:=#151;  Inc(j);  end; //¿

    192..239://'À'..'ï'
      begin
        Result[j]:=#208;  Inc(j);
        Result[j]:=Char(n-48);  Inc(j);
      end;
    240..255://'ð'..'ÿ'
      begin
        Result[j]:=#209;  Inc(j);
        Result[j]:=Char(n-112);  Inc(j);
      end;
    end;//Case
  end;

SetLength(Result,j-1);
end;
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

Рейтинг@Mail.ru