Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Алгоритмы > Перекодировка


Автор: RoboSol 06.01.05, 08:06
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    unit ConvertEncodingUnit;
    interface
    type // Тип матриц перекодировки
      TCodeMatrix = array[1..255] of char;
    {******************************************************************************
    {ANSI, KOI8-R, KOI8-U, OEM/DOS, ISO
    В этой версии имеется 6 видов матриц перекодирования (тип TCodeMatrix):
    1. cmAnsiToKoi8R - перекодирует строку из кодировки ANSI в кодировку KOI8-R
    2. cmAnsiToKoi8U - перекодирует строку из кодировки ANSI в кодировку KOI8-U
    3. cmKoi8RToAnsi - перекодирует строку из кодировки KOI8-R в кодировку ANSI
    4. cmKoi8UToAnsi - перекодирует строку из кодировки KOI8-U в кодировку ANSI
    5. cmOemDosToAnsi - перекодирует строку из кодировки OEM/DOS в кодировку ANSI
    6. cmIsoToAnsi - перекодирует строку из кодировки ISO в кодировку ANSI
    ******************************************************************************}
       function ConvertEncoding(sIn: string; sCoding: string): string;
     
    const // Матрицы перекодировки
      FirstCodes =
        #1#2#3#4#5#6#7#8#9#10#11#12#13#14#15#16#17#18#19#20#21#22#23#24#25#26#27#28+
       #29#30#31' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^' +
        '_`abcdefghijklmnopqrstuvwxyz{|}~';
      cmAnsiToKoi8R: TCodeMatrix = FirstCodes // ver 1.0, ©VEG, 31.10.2003
      + 'ЂЃ‚ѓ„…†‡?‰Љ‹ЊЌЋЏђ‘’“”•–—?™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·Ј—є»јЅѕїбвчздецъй'
        + 'клмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС';
      cmAnsiToKoi8U: TCodeMatrix = FirstCodes // ver 0.8, ©VEG, 31.10.2003
      + 'ЂЃ‚ѓ„…†‡?‰Љ‹ЊЌЋЏђ‘’“”•–—?™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·Ј—є»јЅѕїбвчздецъй'
        + 'клмнопртуфхжигюыэящшьасБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС';
      cmKoi8RToAnsi: TCodeMatrix = FirstCodes // ver 1.0, ©VEG, 31.10.2003
      + '-¦-¬L-++T++---¦¦---?¦•v??? ?°?·?=¦-ёг㬬¬LLL---¦¦¦¦Ё¦¦TTT¦¦¦+++©юабцдефгх'
        + 'ийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ';
      cmKoi8UToAnsi: TCodeMatrix = FirstCodes // ver 1.0, ©VEG, 31.10.2003
      + '-¦-¬L-++T++---¦¦---?¦•v??? ?°?·?=¦-ёєгії¬LLL-ґў¦¦¦¦ЁЄ¦ІЇT¦¦¦+ҐЎ©юабцдефгх'
        + 'ийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ';
      cmOemDosToAnsi: TCodeMatrix = FirstCodes // ver 1.0, ©VEG, 31.10.2003
      + 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп---¦+¦¦¬¬¦¦¬---¬L+T+-+¦¦L'
        + 'г¦T¦=+¦¦TTLL-г++----¦¦-рстуфхцчшщъыьэюяЁёЄєЇїЎў°•·v№¤¦ ';
      cmIsoToAnsi: TCodeMatrix = FirstCodes // ver 1.0, ©VEG, 31.10.2003
      + '???????????????????????????????? ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШ'
        + 'ЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ';  
     
    implementation
     
    function ConvertEncoding(sIn: string; sCoding: string): string;
    //sIn - строка для перекодирования
    //sCoding - матрица для перекодирования
    //result - полученная перекодированная строка
    var
      iFtd: integer;
    begin
      Result:='';
      for iFtd := 1 to length(sIn) do
        result := result + sCoding[ord(sIn[iFtd])];
    end; // ver 1.0, (C)Vrublevsky Evgeny Gennadyevich (BELARUS/SLUTSK), 31.10.2003
    {******************************************************************************}
    end.


использование: ConvertEncoding(aSource, cmKoi8RToAnsi );

с тебя плюс.

Эта тема была разделена из темы "Перекодировка из разных чарсетов"

Автор: Rouse_ 06.01.05, 20:52
M
Тема перенесена из Delphi FAQ -> Интернет, сети, протоколы

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)