📄 zconvert.pas
字号:
{******************************************************************
* (c)copyrights Capella Development Group, Donetsk 1999 - 2000
* Project: Zeos Library
* Module: Functions for convert text between different rus encodings
* Author: Sergey Seroukhov E-Mail: voland@kita.dgtu.donetsk.ua
* Date: 24/04/99
*
* List of changes:
* 13/03/00 - Fixed style (Thanks Robert Marquardt)
******************************************************************}
unit ZConvert;
interface
uses Windows;
type
TEncodingType = (etNone, et866, etKoi8r, etCp1251, etIso88592);
{ Convert following encodings }
function Convert(const Value: string; SrcEnc, DestEnc: TEncodingType): string;
implementation
uses SysUtils;
type
TTransTable = array[0..127] of Char;
const
Table_Koi8r_866: TTransTable =
( #225, #226, #247, #231, #228, #229, #246, #250, #233, #234, #235, #236,
#237, #238, #239, #240, #242, #243, #244, #245, #230, #232, #227, #254,
#251{}, #253, #255, #249, #248, #252, #224, #241, #193, #194, #215, #199,
#196, #197, #214, #218, #201, #202, #203, #204, #205, #206, #207, #208,
#144, #145, #146, #129, #135, #178, #180, #167, #166, #181, #161, #168,
#174, #173, #172, #131, #132, #137, #136, #134, #128, #138, #175, #176,
#171, #165, #187, #184, #177, #160, #190, #185, #186, #182, #183, #170,
#169, #162, #163, #189, #188, #133, #130, #141, #140, #142, #143, #139,
#210, #211, #212, #213, #198, #200, #195, #222, #219, #221, #223, #217,
#216, #220, #192, #209, #179, #163, #153, #152, #147, #155, #159, #151,
#156, #149, #158, #150, #191, #157, #148, #154);
Table_866_Koi8r: TTransTable =
( #196, #179, #218, #191, #192, #217, #195, #180, #194, #193, #197, #223,
#220, #219, #221, #222, #176, #177, #178, #244, #254, #249, #251, #247,
#243, #242, #255, #245, #248, #253, #250, #246, #205, #186, #213, #241,
#164, #201, #184, #183, #187, #212, #211, #200, #190, #189, #188, #198,
#199, #204, #181, #240, #182, #185, #209, #210, #203, #207, #208, #202,
#216, #215, #206, #252, #238, #160, #161, #230, #164, #165, #228, #163,
#229, #168, #169, #170, #171, #172, #173, #174, #175, #239, #224, #225,
#226, #227, #166, #162, #236, #235, #167, #232, #237, #233, #231, #234,
#158, #128, #129, #150, #132, #133, #148, #131, #149, #136, #137, #138,
#139, #140, #141, #142, #143, #159, #144, #145, #146, #147, #134, #130,
#156, #155, #135, #152{251}, #157, #153, #151, #154);
Table_866_Cp1251: TTransTable =
( #192, #193, #194, #195, #196, #197, #198, #199, #200, #201, #202, #203,
#204, #205, #206, #207, #208, #209, #210, #211, #212, #213, #214, #215,
#216, #217, #218, #219, #220, #221, #222, #223, #224, #225, #226, #227,
#228, #229, #230, #231, #232, #233, #234, #235, #236, #237, #238, #239,
#45, #45, #45, #166, #43, #166, #166, #172, #172, #166, #166, #172,
#45, #45, #45, #172, #76, #43, #84, #43, #45, #43, #166, #166,
#76, #227, #166, #84, #166, #61, #43, #166, #166, #84, #84, #76,
#76, #45, #227, #43, #43, #45, #45, #45, #45, #166, #166, #45,
#240, #241, #242, #243, #244, #245, #246, #247, #248, #249, #250, #251,
#252, #253, #254, #255, #168, #184, #170, #186, #175, #191, #161, #162,
#156, #155, #135, #152, #157, #153, #151, #154);
Table_Cp1251_866: TTransTable =
( #63, #63, #39, #63, #34, #58, #197, #216, #63, #37, #63, #60,
#63, #63, #63, #63, #63, #39, #39, #34, #34, #7, #45, #45,
#63, #84, #63, #62, #63, #63, #63, #63, #255, #246, #247, #63,
#253, #63, #179, #21, #240, #99, #242, #60, #191, #45, #82, #244,
#248, #43, #73, #105, #63, #231, #20, #250, #241, #252, #243, #62,
#63, #63, #63, #245, #128, #129, #130, #131, #132, #133, #134, #135,
#136, #137, #138, #139, #140, #141, #142, #143, #144, #145, #146, #147,
#148, #149, #150, #151, #152, #153, #154, #155, #156, #157, #158, #159,
#160, #161, #162, #163, #164, #165, #166, #167, #168, #169, #170, #171,
#172, #173, #174, #175, #224, #225, #226, #227, #228, #229, #230, #231,
#232, #233, #234, #235, #236, #237, #238, #239 );
Table_Cp1251_Koi8r: TTransTable =
( #63, #63, #39, #63, #34, #58, #138, #188, #63, #37, #63, #60,
#63, #63, #63, #63, #63, #39, #39, #34, #34, #7, #45, #45,
#63, #84, #63, #62, #63, #63, #63, #63, #154, #159, #151, #63,
#157, #63, #129, #21, #179, #99, #153, #60, #131, #45, #82, #147,
#156, #43, #73, #105, #63, #222, #20, #158, #163, #191, #152, #62,
#63, #63, #63, #155, #225, #226, #247, #231, #228, #229, #246, #250,
#233, #234, #235, #236, #237, #238, #239, #240, #242, #243, #244, #245,
#230, #232, #227, #254, #251, #253, #255, #249, #248, #252, #224, #241,
#193, #194, #215, #199, #196, #197, #214, #218, #201, #202, #203, #204,
#205, #206, #207, #208, #210, #211, #212, #213, #198, #200, #195, #222,
#219, #221, #223, #217, #216, #220, #192, #209 );
Table_Koi8r_Cp1251: TTransTable =
( #45, #166, #45, #172, #76, #45, #43, #43, #84, #43, #43, #45,
#45, #45, #166, #166, #45, #45, #45, #175, #151, #155, #152, #162,
#186, #170, #154, #191, #156, #153, #135, #161, #61, #166, #45, #184,
#228, #227, #172, #172, #172, #76, #76, #76, #45, #45, #45, #166,
#166, #166, #166, #168, #166, #166, #84, #84, #84, #166, #166, #166,
#43, #43, #43, #157, #254, #224, #225, #246, #228, #229, #244, #227,
#245, #232, #233, #234, #235, #236, #237, #238, #239, #255, #240, #241,
#242, #243, #230, #226, #252, #251, #231, #248, #253, #249, #247, #250,
#222, #192, #193, #214, #196, #197, #212, #195, #213, #200, #201, #202,
#203, #204, #205, #206, #207, #223, #208, #209, #210, #211, #198, #194,
#220, #219, #199, #216, #221, #217, #215, #218 );
Table_Iso88592_Cp1250: TTransTable =
( #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #165, #0, #0,
#0, #0, #140, #0, #0, #0, #0, #0, #143, #0, #0, #0,
#0, #185, #0, #0, #0, #0, #156, #0, #0, #0, #0, #0,
#159, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0 );
Table_Cp1250_Iso88592: TTransTable =
( #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#166, #0, #0, #172, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #182, #0, #0, #188, #0, #0, #0, #0,
#0, #161, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #177, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0,
#0, #0, #0, #0, #0, #0, #0, #0 );
{ Local convertion }
procedure XConvert(Value: PChar; Table: PChar); assembler;
asm
PUSH ESI
PUSHA
MOV EBX, Value
MOV ESI, Table
XOR EAX, EAX
@Cycle:
MOV AL, [EBX]
CMP AL, 0
JZ @Exit
CMP AL, 128
JB @Skip
SUB AL, 128
MOV AL, [ESI+EAX]
CMP AL, 0
JZ @Skip
MOV [EBX], AL
@Skip:
INC EBX
JMP @Cycle
@Exit:
POPA
POP ESI
end;
{ Convert following encodings }
function Convert(const Value: string; SrcEnc, DestEnc: TEncodingType): string;
var
Table: PChar;
begin
Result := Value + '';
if Result = '' then Exit;
if SrcEnc = etCp1251 then SrcEnc := etNone;
if DestEnc = etCp1251 then DestEnc := etNone;
if SrcEnc = DestEnc then Exit;
case SrcEnc of
et866:
case DestEnc of
etKoi8r: Table := Table_866_Koi8r;
etNone: Table := Table_866_Cp1251;
else Exit;
end;
etKoi8r:
case DestEnc of
et866: Table := Table_Koi8r_866;
etNone: Table := Table_Koi8r_Cp1251;
else Exit;
end;
etIso88592:
case DestEnc of
etNone: Table := Table_Iso88592_Cp1250;
else Exit;
end;
etNone:
case DestEnc of
et866: Table := Table_Cp1251_866;
etKoi8r: Table := Table_Cp1251_Koi8r;
etIso88592: Table := Table_Cp1250_Iso88592;
else Exit;
end;
else
Exit;
end;
XConvert(PChar(Result), Table);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -