📄 gb2big5.pas
字号:
{
模块名称:GB码、BIG5码转换
使用方法:1、VerifyBIG5(string);
2、GBtoBIG5(string);
3、BIG5toGB(string);
4、AutoGB(string);
5、AutoBIG5(string);
返回值: 无
}
unit Gb2Big5;
interface
function VerifyBIG5(Value : string) : boolean;
function GBtoBIG5(Value : string) : string;
function BIG5toGB(Value : string) : string;
function AutoGB(Value : string) : string;
function AutoBIG5(Value : string) : string;
implementation
var
BIG5Order : array[0 .. 14757] of Word;
GBOrder : array[0 .. 8177] of Word;
function WordToString(Value: Word) : string;
begin
Result := Chr(Hi(Value)) + Chr(Lo(Value));
end;
function GBOffset(Value: string) : integer;
begin
Result := -1;
if Length(Value) >= 2 then
Result := (Ord(Value[1]) - 161) * 94 + Ord(Value[2]) - 161;
end;
function BIG5Offset(Value: string) : integer;
begin
Result := -1;
if Length(Value) >= 2 then
begin
if Ord(Value[2]) <= 126 then
Result := (Ord(Value[1]) - 161) * 157 + Ord(Value[2]) - 64
else
Result := (Ord(Value[1]) - 161) * 157 + Ord(Value[2]) - 98;
end;
end;
function isGB(Value: string) : Boolean;
begin
Result := (Length(Value) < 2) or
(((Value[1] > #161) and (Value[1] < #247)) and
((Value[2] >= #161) and (Value[2] <= #254)));
end;
function isBIG5(Value: string) : Boolean;
begin
Result := (Length(Value) >= 2) and
((Value[1] >= #129) and (Value[1] <= #254)) and
(((Value[2] >= #64) and (Value[2] <= #126)) or ((Value[2] >= #161) and (Value[2] <= #254)));
end;
function VerifyBIG5(Value : string) : boolean;
var
nLeng, nIndex : integer;
strTempStr : string[2];
nGBCount, nCount : integer;
begin
nLeng := Length(Value);
nIndex := 1;
nGBCount := 0;
nCount := nLeng;
while nIndex <= nLeng do
begin
strTempStr := Value[nIndex] + Value[nIndex + 1];
if isGB(strTempStr) then
begin
inc(nGBCount, 2);
inc(nIndex);
end
else
begin
if Value[nIndex] > #127 then
inc(nIndex)
else
dec(nCount);
end;
inc(nIndex);
end;
Result := (nGBCount * 1.4 < nCount);
end;
function GBtoBIG5(Value: string) : string;
var
nLeng, nIndex : integer;
strTempStr : string[2];
nOffset : integer;
strOutput : string;
begin
strOutput := '';
nLeng := Length(Value);
nIndex := 1;
while nIndex <= nLeng do
begin
strTempStr := Value[nIndex] + Value[nIndex + 1];
if isGB(strTempStr) then
begin
nOffset := GBOffset(strTempStr);
if (nOffset >= 0) and (nOffset <= 8177) then
begin
strOutput := strOutput + WordToString(GBOrder[nOffset]);
inc(nIndex);
end
else
strOutput := strOutput + Value[nIndex];
end
else
strOutput := strOutput + Value[nIndex] ;
inc(nIndex);
end;
Result := strOutput;
end;
function BIG5toGB(Value: string) : string;
var
nLeng, nIndex : integer;
strTempStr : string[2];
strOutput : string;
nOffset : integer;
begin
strOutput := '';
nLeng := Length(Value);
nIndex := 1;
while nIndex <= nLeng do
begin
strTempStr := Value[nIndex] + Value[nIndex + 1];
if isBIG5(strTempStr) then
begin
nOffset := BIG5Offset(strTempStr);
if (nOffset >= 0) and (nOffset <= 14757) then
begin
strOutput := strOutput + WordToString(BIG5Order[nOffset]);
inc(nIndex);
end
else
strOutput := strOutput + Value[nIndex];
end
else
strOutput := strOutput + Value[nIndex];
inc(nIndex);
end;
Result := strOutput;
end;
function AutoGB(Value : string) : string;
begin
if VerifyBIG5(Value) then
Result := BIG5toGB(Value)
else
Result := Value;
end;
function AutoBIG5(Value : string) : string;
begin
if VerifyBIG5(Value) then
Result := Value
else
Result := GBtoBIG5(Value);
end;
initialization
BIG5Order[0] := $2020;
BIG5Order[1] := $A3AC;
BIG5Order[2] := $A1A2;
BIG5Order[3] := $A1A3;
BIG5Order[4] := $2020;
BIG5Order[5] := $A1A4;
BIG5Order[6] := $A3BB;
BIG5Order[7] := $A3BA;
BIG5Order[8] := $A3BF;
BIG5Order[9] := $A3A1;
BIG5Order[10] := $A1C3;
BIG5Order[11] := $A9A9;
BIG5Order[12] := $A1A7;
BIG5Order[13] := $A3AC;
BIG5Order[14] := $2020;
BIG5Order[15] := $A3AE;
BIG5Order[16] := $2020;
BIG5Order[17] := $A3BB;
BIG5Order[18] := $A3BA;
BIG5Order[19] := $A3BF;
BIG5Order[20] := $2020;
BIG5Order[21] := $A9A7;
BIG5Order[22] := $A9A5;
BIG5Order[23] := $A9A6;
BIG5Order[24] := $A9A4;
BIG5Order[25] := $2020;
BIG5Order[26] := $A3DF;
BIG5Order[27] := $2020;
BIG5Order[28] := $2020;
BIG5Order[29] := $A3A8;
BIG5Order[30] := $A3A9;
BIG5Order[31] := $A1D0;
BIG5Order[32] := $2020;
BIG5Order[33] := $A3FB;
BIG5Order[34] := $A3FD;
BIG5Order[35] := $2020;
BIG5Order[36] := $2020;
BIG5Order[37] := $A1B1;
BIG5Order[38] := $A1B2;
BIG5Order[39] := $2020;
BIG5Order[40] := $2020;
BIG5Order[41] := $A1BE;
BIG5Order[42] := $A1BF;
BIG5Order[43] := $2020;
BIG5Order[44] := $2020;
BIG5Order[45] := $A1B6;
BIG5Order[46] := $A1B7;
BIG5Order[47] := $A1C4;
BIG5Order[48] := $A1C5;
BIG5Order[49] := $A1B4;
BIG5Order[50] := $A1B5;
BIG5Order[51] := $2020;
BIG5Order[52] := $A1A6;
BIG5Order[53] := $A1B8;
BIG5Order[54] := $A1B9;
BIG5Order[55] := $2020;
BIG5Order[56] := $2020;
BIG5Order[57] := $A1BA;
BIG5Order[58] := $A1BB;
BIG5Order[59] := $2020;
BIG5Order[60] := $2020;
BIG5Order[61] := $A3A8;
BIG5Order[62] := $A3A9;
BIG5Order[63] := $2020;
BIG5Order[64] := $2020;
BIG5Order[65] := $A1B1;
BIG5Order[66] := $A1B2;
BIG5Order[67] := $A1AE;
BIG5Order[68] := $A3A7;
BIG5Order[69] := $A1B0;
BIG5Order[70] := $A1B1;
BIG5Order[71] := $2020;
BIG5Order[72] := $A3A2;
BIG5Order[73] := $A3E0;
BIG5Order[74] := $2020;
BIG5Order[75] := $A3A3;
BIG5Order[76] := $A3A6;
BIG5Order[77] := $A3AA;
BIG5Order[78] := $A1F9;
BIG5Order[79] := $A1EC;
BIG5Order[80] := $2020;
BIG5Order[81] := $A1F0;
BIG5Order[82] := $A1F1;
BIG5Order[83] := $A1F7;
BIG5Order[84] := $A1F8;
BIG5Order[85] := $A1F2;
BIG5Order[86] := $A1EE;
BIG5Order[87] := $A1EF;
BIG5Order[88] := $A1F3;
BIG5Order[89] := $A1F4;
BIG5Order[90] := $A1F5;
BIG5Order[91] := $A1F6;
BIG5Order[92] := $2020;
BIG5Order[93] := $2020;
BIG5Order[94] := $2020;
BIG5Order[95] := $2020;
BIG5Order[96] := $A1A5;
BIG5Order[97] := $2020;
BIG5Order[98] := $2020;
BIG5Order[99] := $2020;
BIG5Order[100] := $2020;
BIG5Order[101] := $2020;
BIG5Order[102] := $2020;
BIG5Order[103] := $2020;
BIG5Order[104] := $2020;
BIG5Order[105] := $2020;
BIG5Order[106] := $2020;
BIG5Order[107] := $2020;
BIG5Order[108] := $2020;
BIG5Order[109] := $A3AB;
BIG5Order[110] := $2020;
BIG5Order[111] := $A1C1;
BIG5Order[112] := $A1C2;
BIG5Order[113] := $A1C0;
BIG5Order[114] := $2020;
BIG5Order[115] := $A3BC;
BIG5Order[116] := $A3BE;
BIG5Order[117] := $A3BD;
BIG5Order[118] := $A1DC;
BIG5Order[119] := $A1DD;
BIG5Order[120] := $A1D9;
BIG5Order[121] := $A1DE;
BIG5Order[122] := $2020;
BIG5Order[123] := $A1D4;
BIG5Order[124] := $2020;
BIG5Order[125] := $2020;
BIG5Order[126] := $2020;
BIG5Order[127] := $2020;
BIG5Order[128] := $2020;
BIG5Order[129] := $A1AB;
BIG5Order[130] := $A1C9;
BIG5Order[131] := $A1C8;
BIG5Order[132] := $2020;
BIG5Order[133] := $A1CF;
BIG5Order[134] := $2020;
BIG5Order[135] := $2020;
BIG5Order[136] := $2020;
BIG5Order[137] := $2020;
BIG5Order[138] := $A1D2;
BIG5Order[139] := $A1D3;
BIG5Order[140] := $A1DF;
BIG5Order[141] := $A1E0;
BIG5Order[142] := $A1E2;
BIG5Order[143] := $A1E1;
BIG5Order[144] := $2020;
BIG5Order[145] := $A1D1;
BIG5Order[146] := $A1FC;
BIG5Order[147] := $A1FD;
BIG5Order[148] := $A1FB;
BIG5Order[149] := $A1FA;
BIG5Order[150] := $2020;
BIG5Order[151] := $2020;
BIG5Order[152] := $2020;
BIG5Order[153] := $2020;
BIG5Order[154] := $A1AC;
BIG5Order[155] := $2020;
BIG5Order[156] := $A3AF;
BIG5Order[157] := $A3DC;
BIG5Order[158] := $2020;
BIG5Order[159] := $2020;
BIG5Order[160] := $A1E7;
BIG5Order[161] := $A3A4;
BIG5Order[162] := $2020;
BIG5Order[163] := $A1E9;
BIG5Order[164] := $A1EA;
BIG5Order[165] := $A3A5;
BIG5Order[166] := $2020;
BIG5Order[167] := $A1E6;
BIG5Order[168] := $2020;
BIG5Order[169] := $2020;
BIG5Order[170] := $2020;
BIG5Order[171] := $A3C0;
BIG5Order[172] := $2020;
BIG5Order[173] := $2020;
BIG5Order[174] := $2020;
BIG5Order[175] := $2020;
BIG5Order[176] := $2020;
BIG5Order[177] := $2020;
BIG5Order[178] := $2020;
BIG5Order[179] := $2020;
BIG5Order[180] := $2020;
BIG5Order[181] := $A1E3;
BIG5Order[182] := $2020;
BIG5Order[183] := $2020;
BIG5Order[184] := $2020;
BIG5Order[185] := $2020;
BIG5Order[186] := $2020;
BIG5Order[187] := $2020;
BIG5Order[188] := $2020;
BIG5Order[189] := $2020;
BIG5Order[190] := $2020;
BIG5Order[191] := $2020;
BIG5Order[192] := $2020;
BIG5Order[193] := $2020;
BIG5Order[194] := $2020;
BIG5Order[195] := $2020;
BIG5Order[196] := $2020;
BIG5Order[197] := $2020;
BIG5Order[198] := $2020;
BIG5Order[199] := $2020;
BIG5Order[200] := $2020;
BIG5Order[201] := $2020;
BIG5Order[202] := $2020;
BIG5Order[203] := $2020;
BIG5Order[204] := $2020;
BIG5Order[205] := $2020;
BIG5Order[206] := $A9EF;
BIG5Order[207] := $A9DF;
BIG5Order[208] := $A9D7;
BIG5Order[209] := $A9CF;
BIG5Order[210] := $A9C7;
BIG5Order[211] := $A3FE;
BIG5Order[212] := $2020;
BIG5Order[213] := $2020;
BIG5Order[214] := $2020;
BIG5Order[215] := $A9B3;
BIG5Order[216] := $A9B7;
BIG5Order[217] := $A9BB;
BIG5Order[218] := $A9BF;
BIG5Order[219] := $2020;
BIG5Order[220] := $2020;
BIG5Order[221] := $2020;
BIG5Order[222] := $2020;
BIG5Order[223] := $2020;
BIG5Order[224] := $2020;
BIG5Order[225] := $2020;
BIG5Order[226] := $2020;
BIG5Order[227] := $2020;
BIG5Order[228] := $2020;
BIG5Order[229] := $2020;
BIG5Order[230] := $2020;
BIG5Order[231] := $2020;
BIG5Order[232] := $2020;
BIG5Order[233] := $2020;
BIG5Order[234] := $A3B0;
BIG5Order[235] := $A3B1;
BIG5Order[236] := $A3B2;
BIG5Order[237] := $A3B3;
BIG5Order[238] := $A3B4;
BIG5Order[239] := $A3B5;
BIG5Order[240] := $A3B6;
BIG5Order[241] := $A3B7;
BIG5Order[242] := $A3B8;
BIG5Order[243] := $A3B9;
BIG5Order[244] := $A2F1;
BIG5Order[245] := $A2F2;
BIG5Order[246] := $A2F3;
BIG5Order[247] := $A2F4;
BIG5Order[248] := $A2F5;
BIG5Order[249] := $A2F6;
BIG5Order[250] := $A2F7;
BIG5Order[251] := $A2F8;
BIG5Order[252] := $A2F9;
BIG5Order[253] := $A2FA;
BIG5Order[254] := $2020;
BIG5Order[255] := $2020;
BIG5Order[256] := $2020;
BIG5Order[257] := $2020;
BIG5Order[258] := $2020;
BIG5Order[259] := $2020;
BIG5Order[260] := $2020;
BIG5Order[261] := $2020;
BIG5Order[262] := $2020;
BIG5Order[263] := $2020;
BIG5Order[264] := $2020;
BIG5Order[265] := $2020;
BIG5Order[266] := $A3C1;
BIG5Order[267] := $A3C2;
BIG5Order[268] := $A3C3;
BIG5Order[269] := $A3C4;
BIG5Order[270] := $A3C5;
BIG5Order[271] := $A3C6;
BIG5Order[272] := $A3C7;
BIG5Order[273] := $A3C8;
BIG5Order[274] := $A3C9;
BIG5Order[275] := $A3CA;
BIG5Order[276] := $A3CB;
BIG5Order[277] := $A3CC;
BIG5Order[278] := $A3CD;
BIG5Order[279] := $A3CE;
BIG5Order[280] := $A3CF;
BIG5Order[281] := $A3D0;
BIG5Order[282] := $A3D1;
BIG5Order[283] := $A3D2;
BIG5Order[284] := $A3D3;
BIG5Order[285] := $A3D4;
BIG5Order[286] := $A3D5;
BIG5Order[287] := $A3D6;
BIG5Order[288] := $A3D7;
BIG5Order[289] := $A3D8;
BIG5Order[290] := $A3D9;
BIG5Order[291] := $A3DA;
BIG5Order[292] := $A3E1;
BIG5Order[293] := $A3E2;
BIG5Order[294] := $A3E3;
BIG5Order[295] := $A3E4;
BIG5Order[296] := $A3E5;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -