📄 synachar.pas
字号:
{$IFDEF LINUX}
function GetCurCP: TMimeChar;
begin
Result := GetCPFromID(nl_langinfo(_NL_CTYPE_CODESET_NAME));
end;
function GetCurOEMCP: TMimeChar;
begin
Result := GetCurCP;
end;
{$ELSE}
function CPToMimeChar(Value: Integer): TMimeChar;
begin
case Value of
437, 850, 20127:
Result := ISO_8859_1; //I know, it is not ideal!
737:
Result := CP737;
775:
Result := CP775;
852:
Result := CP852;
855:
Result := CP855;
857:
Result := CP857;
858:
Result := CP858;
860:
Result := CP860;
861:
Result := CP861;
862:
Result := CP862;
863:
Result := CP863;
864:
Result := CP864;
865:
Result := CP865;
866:
Result := CP866;
869:
Result := CP869;
874:
Result := ISO_8859_15;
895:
Result := CP895;
932:
Result := CP932;
936:
Result := CP936;
949:
Result := CP949;
950:
Result := CP950;
1200:
Result := UCS_2LE;
1201:
Result := UCS_2;
1250:
Result := CP1250;
1251:
Result := CP1251;
1253:
Result := CP1253;
1254:
Result := CP1254;
1255:
Result := CP1255;
1256:
Result := CP1256;
1257:
Result := CP1257;
1258:
Result := CP1258;
1361:
Result := CP1361;
10000:
Result := MAC;
10004:
Result := MACAR;
10005:
Result := MACHEB;
10006:
Result := MACGR;
10007:
Result := MACCYR;
10010:
Result := MACRO;
10017:
Result := MACUK;
10021:
Result := MACTH;
10029:
Result := MACCE;
10079:
Result := MACICE;
10081:
Result := MACTU;
10082:
Result := MACCRO;
12000:
Result := UCS_4LE;
12001:
Result := UCS_4;
20866:
Result := KOI8_R;
20932:
Result := JIS_X0208;
20936:
Result := GB2312;
21866:
Result := KOI8_U;
28591:
Result := ISO_8859_1;
28592:
Result := ISO_8859_2;
28593:
Result := ISO_8859_3;
28594:
Result := ISO_8859_4;
28595:
Result := ISO_8859_5;
28596, 708:
Result := ISO_8859_6;
28597:
Result := ISO_8859_7;
28598, 38598:
Result := ISO_8859_8;
28599:
Result := ISO_8859_9;
28605:
Result := ISO_8859_15;
50220:
Result := ISO_2022_JP; //? ISO 2022 Japanese with no halfwidth Katakana
50221:
Result := ISO_2022_JP1;//? Japanese with halfwidth Katakana
50222:
Result := ISO_2022_JP2;//? Japanese JIS X 0201-1989
50225:
Result := ISO_2022_KR;
50227:
Result := ISO_2022_CN;//? ISO 2022 Simplified Chinese
50229:
Result := ISO_2022_CNE;//? ISO 2022 Traditional Chinese
51932:
Result := EUC_JP;
51936:
Result := GB2312;
51949:
Result := EUC_KR;
52936:
Result := HZ;
54936:
Result := GB18030;
65000:
Result := UTF_7;
65001:
Result := UTF_8;
0:
Result := UCS_2LE;
else
Result := CP1252;
end;
end;
function GetCurCP: TMimeChar;
begin
Result := CPToMimeChar(GetACP);
end;
function GetCurOEMCP: TMimeChar;
begin
Result := CPToMimeChar(GetOEMCP);
end;
{$ENDIF}
{==============================================================================}
function NeedCharsetConversion(const Value: AnsiString): Boolean;
var
n: Integer;
begin
Result := False;
for n := 1 to Length(Value) do
if (Ord(Value[n]) > 127) or (Ord(Value[n]) = 0) then
begin
Result := True;
Break;
end;
end;
{==============================================================================}
function IdealCharsetCoding(const Value: AnsiString; CharFrom: TMimeChar;
CharTo: TMimeSetChar): TMimeChar;
var
n: Integer;
max: Integer;
s, t, u: AnsiString;
CharSet: TMimeChar;
begin
Result := ISO_8859_1;
s := Copy(Value, 1, 1024); //max first 1KB for next procedure
max := 0;
for n := Ord(Low(TMimeChar)) to Ord(High(TMimeChar)) do
begin
CharSet := TMimeChar(n);
if CharSet in CharTo then
begin
t := CharsetConversionTrans(s, CharFrom, CharSet, Replace_None, False);
u := CharsetConversionTrans(t, CharSet, CharFrom, Replace_None, False);
if s = u then
begin
Result := CharSet;
Exit;
end;
if Length(u) > max then
begin
Result := CharSet;
max := Length(u);
end;
end;
end;
end;
{==============================================================================}
function GetBOM(Value: TMimeChar): AnsiString;
begin
Result := '';
case Value of
UCS_2:
Result := #$fe + #$ff;
UCS_4:
Result := #$00 + #$00 + #$fe + #$ff;
UCS_2LE:
Result := #$ff + #$fe;
UCS_4LE:
Result := #$ff + #$fe + #$00 + #$00;
UTF_8:
Result := #$ef + #$bb + #$bf;
end;
end;
{==============================================================================}
function GetCPFromID(Value: AnsiString): TMimeChar;
begin
Value := UpperCase(Value);
if (Pos('KAMENICKY', Value) > 0) or (Pos('895', Value) > 0) then
Result := CP895
else
if Pos('MUTF-7', Value) > 0 then
Result := UTF_7mod
else
Result := GetCPFromIconvID(Value);
end;
{==============================================================================}
function GetIDFromCP(Value: TMimeChar): AnsiString;
begin
case Value of
CP895:
Result := 'CP-895';
UTF_7mod:
Result := 'mUTF-7';
else
Result := GetIconvIDFromCP(Value);
end;
end;
{==============================================================================}
function StringToWide(const Value: AnsiString): WideString;
var
n: integer;
x, y: integer;
begin
SetLength(Result, Length(Value) div 2);
for n := 1 to Length(Value) div 2 do
begin
x := Ord(Value[((n-1) * 2) + 1]);
y := Ord(Value[((n-1) * 2) + 2]);
Result[n] := WideChar(x * 256 + y);
end;
end;
{==============================================================================}
function WideToString(const Value: WideString): AnsiString;
var
n: integer;
x: integer;
begin
SetLength(Result, Length(Value) * 2);
for n := 1 to Length(Value) do
begin
x := Ord(Value[n]);
Result[((n-1) * 2) + 1] := AnsiChar(x div 256);
Result[((n-1) * 2) + 2] := AnsiChar(x mod 256);
end;
end;
{==============================================================================}
initialization
begin
IconvArr[0].Charset := ISO_8859_1;
IconvArr[0].Charname := 'ISO-8859-1 CP819 IBM819 ISO-IR-100 ISO8859-1 ISO_8859-1 ISO_8859-1:1987 L1 LATIN1 CSISOLATIN1';
IconvArr[1].Charset := UTF_8;
IconvArr[1].Charname := 'UTF-8';
IconvArr[2].Charset := UCS_2;
IconvArr[2].Charname := 'ISO-10646-UCS-2 UCS-2 CSUNICODE';
IconvArr[3].Charset := UCS_2;
IconvArr[3].Charname := 'UCS-2BE UNICODE-1-1 UNICODEBIG CSUNICODE11';
IconvArr[4].Charset := UCS_2LE;
IconvArr[4].Charname := 'UCS-2LE UNICODELITTLE';
IconvArr[5].Charset := UCS_4;
IconvArr[5].Charname := 'ISO-10646-UCS-4 UCS-4 CSUCS4';
IconvArr[6].Charset := UCS_4;
IconvArr[6].Charname := 'UCS-4BE';
IconvArr[7].Charset := UCS_2LE;
IconvArr[7].Charname := 'UCS-4LE';
IconvArr[8].Charset := UTF_16;
IconvArr[8].Charname := 'UTF-16';
IconvArr[9].Charset := UTF_16;
IconvArr[9].Charname := 'UTF-16BE';
IconvArr[10].Charset := UTF_16LE;
IconvArr[10].Charname := 'UTF-16LE';
IconvArr[11].Charset := UTF_32;
IconvArr[11].Charname := 'UTF-32';
IconvArr[12].Charset := UTF_32;
IconvArr[12].Charname := 'UTF-32BE';
IconvArr[13].Charset := UTF_32;
IconvArr[13].Charname := 'UTF-32LE';
IconvArr[14].Charset := UTF_7;
IconvArr[14].Charname := 'UNICODE-1-1-UTF-7 UTF-7 CSUNICODE11UTF7';
IconvArr[15].Charset := C99;
IconvArr[15].Charname := 'C99';
IconvArr[16].Charset := JAVA;
IconvArr[16].Charname := 'JAVA';
IconvArr[17].Charset := ISO_8859_1;
IconvArr[17].Charname := 'US-ASCII ANSI_X3.4-1968 ANSI_X3.4-1986 ASCII CP367 IBM367 ISO-IR-6 ISO646-US ISO_646.IRV:1991 US CSASCII';
IconvArr[18].Charset := ISO_8859_2;
IconvArr[18].Charname := 'ISO-8859-2 ISO-IR-101 ISO8859-2 ISO_8859-2 ISO_8859-2:1987 L2 LATIN2 CSISOLATIN2';
IconvArr[19].Charset := ISO_8859_3;
IconvArr[19].Charname := 'ISO-8859-3 ISO-IR-109 ISO8859-3 ISO_8859-3 ISO_8859-3:1988 L3 LATIN3 CSISOLATIN3';
IconvArr[20].Charset := ISO_8859_4;
IconvArr[20].Charname := 'ISO-8859-4 ISO-IR-110 ISO8859-4 ISO_8859-4 ISO_8859-4:1988 L4 LATIN4 CSISOLATIN4';
IconvArr[21].Charset := ISO_8859_5;
IconvArr[21].Charname := 'ISO-8859-5 CYRILLIC ISO-IR-144 ISO8859-5 ISO_8859-5 ISO_8859-5:1988 CSISOLATINCYRILLIC';
IconvArr[22].Charset := ISO_8859_6;
IconvArr[22].Charname := 'ISO-8859-6 ARABIC ASMO-708 ECMA-114 ISO-IR-127 ISO8859-6 ISO_8859-6 ISO_8859-6:1987 CSISOLATINARABIC';
IconvArr[23].Charset := ISO_8859_7;
IconvArr[23].Charname := 'ISO-8859-7 ECMA-118 ELOT_928 GREEK GREEK8 ISO-IR-126 ISO8859-7 ISO_8859-7 ISO_8859-7:1987 CSISOLATINGREEK';
IconvArr[24].Charset := ISO_8859_8;
IconvArr[24].Charname := 'ISO_8859-8 HEBREW ISO-8859-8 ISO-IR-138 ISO8859-8 ISO_8859-8:1988 CSISOLATINHEBREW';
IconvArr[25].Charset := ISO_8859_9;
IconvArr[25].Charname := 'ISO-8859-9 ISO-IR-148 ISO8859-9 ISO_8859-9 ISO_8859-9:1989 L5 LATIN5 CSISOLATIN5';
IconvArr[26].Charset := ISO_8859_10;
IconvArr[26].Charname := 'ISO-8859-10 ISO-IR-157 ISO8859-10 ISO_8859-10 ISO_8859-10:1992 L6 LATIN6 CSISOLATIN6';
IconvArr[27].Charset := ISO_8859_13;
IconvArr[27].Charname := 'ISO-8859-13 ISO-IR-179 ISO8859-13 ISO_8859-13 L7 LATIN7';
IconvArr[28].Charset := ISO_8859_14;
IconvArr[28].Charname := 'ISO-8859-14 ISO-CELTIC ISO-IR-199 ISO8859-14 ISO_8859-14 ISO_8859-14:1998 L8 LATIN8';
IconvArr[29].Charset := ISO_8859_1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -