Универсальное и быстрое перекодирование строки из кодировок ANSI, KOI8-R, KOI8-U, OEM-DOS, ISO
Автор: VEG
WEB-сайт: http://delphibase.endimus.com
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Универсальное и быстрое перекодирование строки из кодировок
ANSI, KOI8-R, KOI8-U, OEM/DOS, ISO
В этой функции используется элементарный алгоритм, который по скорости работы
опережает свои аналоги, и позволяет перекодировать текст из различных кодировок.
Для перекодирования строки используется универсальная функция ConvertEncoding,
где в качестве первого параметра выступает строка, которую необходимо
перекодировать, а в качестве второго - матрица перекодирования, которая
определяет из какой кодировки в какую необходимо перекодировать данную строку.
В этой версии имеется 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
Зависимости: System;
Автор: VEG, veg@tut.by, Республика Беларусь - Слуцк
Copyright: ©VEG, 31.10.2003
Дата: 31 октября 2003 г.
***************************************************** }
type // Тип матриц перекодировки
TCodeMatrix = array[1..255] of char;
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
+ '????????????????????????ҳ??????? ЁҖҒӘҪІҜЈҠҢҺҚЎҸАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШ'
+ 'ЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёҗғәҫіҝјҡңһқ§ўҹ';
function ConvertEncoding(sIn: string; sCoding: string): string;
//sIn - строка для перекодирования
//sCoding - матрица для перекодирования
//result - полученная перекодированная строка
var
iFtd: integer;
begin
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
Пример использования:
var
sOut: string;
begin
sOut := ConvertEncoding(ConvertEncoding('Тест!', cmAnsiToKoi8R), cmKoi8RToAnsi);
end;
|