1 |
unit IBCodePage;
|
2 |
|
3 |
{$mode objfpc}{$H+}
|
4 |
{$IF FPC_FULLVERSION >= 20700 }
|
5 |
{$codepage UTF8}
|
6 |
{$DEFINE HAS_ANSISTRING_CODEPAGE}
|
7 |
{$ENDIF}
|
8 |
|
9 |
interface
|
10 |
|
11 |
uses
|
12 |
Classes, SysUtils;
|
13 |
|
14 |
{$IFDEF HAS_ANSISTRING_CODEPAGE}
|
15 |
function IBGetCodePage(IBCP_Name: string): TSystemCodePage;
|
16 |
function IBGetCharacterSetName(CodePage: TSystemCodePage): RawByteString;
|
17 |
{$ENDIF}
|
18 |
|
19 |
implementation
|
20 |
|
21 |
{$IFDEF HAS_ANSISTRING_CODEPAGE}
|
22 |
|
23 |
type
|
24 |
TIBCodePage = record
|
25 |
IBCharacterSetName: string;
|
26 |
cp: TSystemCodePage;
|
27 |
end;
|
28 |
|
29 |
{ Code Page numbers should align with CodePageNames array in Sysutils}
|
30 |
const
|
31 |
IBCodePages: array [0..51] of TIBCodePage = (
|
32 |
(IBCharacterSetName: 'UTF8'; cp: CP_UTF8),
|
33 |
(IBCharacterSetName: 'NONE'; cp: CP_NONE),
|
34 |
(IBCharacterSetName: 'OCTETS'; cp: CP_NONE),
|
35 |
(IBCharacterSetName: 'ASCII'; cp: CP_ASCII),
|
36 |
(IBCharacterSetName: 'SJIS_0208'; cp: 932),
|
37 |
(IBCharacterSetName: 'WIN1250'; cp: 1250),
|
38 |
(IBCharacterSetName: 'WIN1251'; cp: 1251),
|
39 |
(IBCharacterSetName: 'WIN1252'; cp: 1252),
|
40 |
(IBCharacterSetName: 'WIN1253'; cp: 1253),
|
41 |
(IBCharacterSetName: 'WIN1254'; cp: 1254),
|
42 |
(IBCharacterSetName: 'WIN1255'; cp: 1255),
|
43 |
(IBCharacterSetName: 'WIN1256'; cp: 1256),
|
44 |
(IBCharacterSetName: 'WIN1257'; cp: 1257),
|
45 |
(IBCharacterSetName: 'WIN1258'; cp: 1258),
|
46 |
(IBCharacterSetName: 'ISO8859_1'; cp: 28591),
|
47 |
(IBCharacterSetName: 'ISO8859_2'; cp: 28592),
|
48 |
(IBCharacterSetName: 'ISO8859_3'; cp: 28593),
|
49 |
(IBCharacterSetName: 'ISO8859_4'; cp: 28594),
|
50 |
(IBCharacterSetName: 'ISO8859_5'; cp: 28595),
|
51 |
(IBCharacterSetName: 'ISO8859_6'; cp: 28596),
|
52 |
(IBCharacterSetName: 'ISO8859_7'; cp: 28597),
|
53 |
(IBCharacterSetName: 'ISO8859_8'; cp: 28598),
|
54 |
(IBCharacterSetName: 'ISO8859_9'; cp: 28599),
|
55 |
(IBCharacterSetName: 'ISO8859_13'; cp: 28603),
|
56 |
(IBCharacterSetName: 'EUCJ_0208'; cp: 20932),
|
57 |
(IBCharacterSetName: 'DOS437'; cp: 437),
|
58 |
(IBCharacterSetName: 'DOS850'; cp: 850),
|
59 |
(IBCharacterSetName: 'DOS865'; cp: 865),
|
60 |
(IBCharacterSetName: 'DOS852'; cp: 852),
|
61 |
(IBCharacterSetName: 'DOS857'; cp: 857),
|
62 |
(IBCharacterSetName: 'DOS860'; cp: 860),
|
63 |
(IBCharacterSetName: 'DOS861'; cp: 861),
|
64 |
(IBCharacterSetName: 'DOS863'; cp: 863),
|
65 |
(IBCharacterSetName: 'CYRL'; cp: 28595),
|
66 |
(IBCharacterSetName: 'DOS737'; cp: 737),
|
67 |
(IBCharacterSetName: 'DOS775'; cp: 775),
|
68 |
(IBCharacterSetName: 'DOS858'; cp: 858),
|
69 |
(IBCharacterSetName: 'DOS862'; cp: 862),
|
70 |
(IBCharacterSetName: 'DOS864'; cp: 864),
|
71 |
(IBCharacterSetName: 'DOS866'; cp: 866),
|
72 |
(IBCharacterSetName: 'DOS869'; cp: 869),
|
73 |
(IBCharacterSetName: 'NEXT'; cp: CP_NONE),
|
74 |
(IBCharacterSetName: 'KSC_5601'; cp: 949),
|
75 |
(IBCharacterSetName: 'BIG_5'; cp: 950),
|
76 |
(IBCharacterSetName: 'GB_2312'; cp: 52936),
|
77 |
(IBCharacterSetName: 'KOI8R'; cp: 20866),
|
78 |
(IBCharacterSetName: 'KOI8U'; cp: 21866),
|
79 |
(IBCharacterSetName: 'TIS620'; cp: 20838),
|
80 |
(IBCharacterSetName: 'GBK'; cp: 936),
|
81 |
(IBCharacterSetName: 'CP943C'; cp: 50220),
|
82 |
(IBCharacterSetName: 'UNICODE_FSS'; cp: CP_UTF8),
|
83 |
(IBCharacterSetName: 'GB18030' ; cp: 54936)
|
84 |
);
|
85 |
|
86 |
function IBGetCodePage(IBCP_Name: string): TSystemCodePage;
|
87 |
var I: integer;
|
88 |
begin
|
89 |
Result := CP_NONE;
|
90 |
for I := Low(IBCodePages) to High(IBCodePages) do
|
91 |
if IBCodePages[I].IBCharacterSetName = IBCP_Name then
|
92 |
begin
|
93 |
Result := IBCodePages[I].cp;
|
94 |
Exit;
|
95 |
end;
|
96 |
end;
|
97 |
|
98 |
function IBGetCharacterSetName(CodePage: TSystemCodePage): RawByteString;
|
99 |
var I: integer;
|
100 |
begin
|
101 |
Result := 'UTF8';
|
102 |
for I := Low(IBCodePages) to High(IBCodePages) do
|
103 |
if IBCodePages[I].cp = CodePage then
|
104 |
begin
|
105 |
Result := IBCodePages[I].IBCharacterSetName;
|
106 |
Exit;
|
107 |
end;
|
108 |
end;
|
109 |
|
110 |
{$ENDIF}
|
111 |
|
112 |
end.
|
113 |
|