root/trunk/lconvencoding.pas

Revision 162, 140.9 kB (checked in by sagrer, 5 months ago)

В связи с критикой моего патча к Lazarus (он был принят частично) - немного переделал механизм перевода, непринятая часть патча будет в исходнике моих модулей локализации.

  • Property svnmailer:content-charset set to cp1251
Line 
1 {
2  *****************************************************************************
3  *                                                                           *
4  *  This file is part of the Lazarus Component Library (LCL)                 *
5  *                                                                           *
6  *  See the file COPYING.modifiedLGPL, included in this distribution,        *
7  *  for details about the copyright.                                         *
8  *                                                                           *
9  *  This program is distributed in the hope that it will be useful,          *
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                     *
12  *                                                                           *
13  *****************************************************************************
14 }
15 unit LConvEncoding;
16
17 {$mode objfpc}{$H+}
18 //As iconv is Linux command, there is no sense in Windows
19 {$IFDEF MSWindows}
20 {$DEFINE WINDOWS}
21 {$ENDIF}
22 {$IFDEF WINDOWS}
23 {$WARNING Windows/Wine/ReactOS locale conversion is not fully supported yet. Sorry.}
24 {$ENDIF}
25
26 interface
27
28 uses
29   SysUtils, Classes, dos, LCLProc
30   {$IFDEF UNIX},unix{$ENDIF};
31  
32 {$inline on}
33
34 const
35   EncodingUTF8 = 'utf8';
36   EncodingAnsi = 'ansi';
37
38 function GuessEncoding(const s: string): string;
39
40 function ConvertEncoding(const s, FromEncoding, ToEncoding: string): string;
41
42 function GetSystemEncoding: string;
43 function NormalizeEncoding(const Encoding: string): string;
44
45 type
46   TConvertEncodingFunction = function(const s: string): string;
47   TCharToUTF8Table = array[char] of PChar;
48   TUnicodeToCharID = function(Unicode: cardinal): integer;
49 var
50   ConvertAnsiToUTF8: TConvertEncodingFunction = nil;
51   ConvertUTF8ToAnsi: TConvertEncodingFunction = nil;
52  
53 function ISO_8859_1ToUTF8(const s: string): string; // central europe
54 function CP1250ToUTF8(const s: string): string; // central europe
55 function CP1251ToUTF8(const s: string): string; // cyrillic
56 function CP1252ToUTF8(const s: string): string; // latin 1
57 function CP1253ToUTF8(const s: string): string; // greek
58 function CP1254ToUTF8(const s: string): string; // turkish
59 function CP1255ToUTF8(const s: string): string; // hebrew
60 function CP1256ToUTF8(const s: string): string; // arabic
61 function CP1257ToUTF8(const s: string): string; // baltic
62 function CP1258ToUTF8(const s: string): string; // vietnam
63 function CP866ToUTF8(const s: string): string;  // DOS and Windows console's cyrillic
64 function CP874ToUTF8(const s: string): string;  // thai
65 function KOI8ToUTF8(const s: string): string;  // russian cyrillic
66 function SingleByteToUTF8(const s: string;
67                           const Table: TCharToUTF8Table): string;
68
69 function UTF8ToISO_8859_1(const s: string): string; // central europe
70 function UTF8ToCP1250(const s: string): string; // central europe
71 function UTF8ToCP1251(const s: string): string; // cyrillic
72 function UTF8ToCP1252(const s: string): string; // latin 1
73 function UTF8ToCP1253(const s: string): string; // greek
74 function UTF8ToCP1254(const s: string): string; // turkish
75 function UTF8ToCP1255(const s: string): string; // hebrew
76 function UTF8ToCP1256(const s: string): string; // arabic
77 function UTF8ToCP1257(const s: string): string; // baltic
78 function UTF8ToCP1258(const s: string): string; // vietnam
79 function UTF8ToCP866(const s: string): string;  // DOS and Windows console's cyrillic
80 function UTF8ToCP874(const s: string): string;  // thai
81 function UTF8ToKOI8(const s: string): string;  // russian cyrillic
82 function UTF8ToSingleByte(const s: string;
83                           const UTF8CharConvFunc: TUnicodeToCharID): string;
84
85 procedure GetSupportedEncodings(List: TStrings);
86
87 implementation
88
89 {$IFDEF Windows}
90 uses Windows;
91 {$ENDIF}
92
93 var EncodingValid: boolean = false;
94     SystemEncoding: string = EncodingAnsi;
95
96 {$IFDEF Windows}
97 function GetWindowsEncoding: string;
98 var
99   cp : UINT;
100 {$IFDEF WinCE}
101 // CP_UTF8 is missing in the windows unit of the Windows CE RTL
102 const
103   CP_UTF8 = 65001;
104 {$ENDIF}
105 begin
106   cp := GetACP;
107   case cp of
108     CP_UTF8: Result := EncodingUTF8;
109   else
110     Result:='cp'+IntToStr(GetACP);
111   end;
112 end;
113 {$ENDIF}
114
115 function GetSystemEncoding: string;
116 var Lang: string;
117     i: integer;
118 begin
119   if EncodingValid then begin
120     Result:=SystemEncoding;
121     exit;
122   end;
123
124   {$IFDEF Windows}
125   Result:=GetWindowsEncoding;
126   {$ELSE}
127   Result:=EncodingAnsi;
128   {$ENDIF}
129
130   lang := GetEnv('LC_ALL');
131   if Length(lang) = 0 then
132   begin
133     lang := GetEnv('LC_MESSAGES');
134     if Length(lang) = 0 then
135     begin
136       lang := GetEnv('LANG');
137     end;
138   end;
139   i:=pos('.',Lang);
140   if (i>0) and (i<=length(Lang)) then
141     Result:=copy(Lang,i+1,length(Lang)-i);
142
143   Result:=NormalizeEncoding(Result);
144
145   SystemEncoding:=Result;
146   EncodingValid:=true;
147 end;
148
149 function NormalizeEncoding(const Encoding: string): string;
150 var
151   i: Integer;
152 begin
153   Result:=LowerCase(Encoding);
154   for i:=length(Result) downto 1 do
155     if Result[i]='-' then System.Delete(Result,i,1);
156 end;
157
158 const
159   ArrayISO_8859_1ToUTF8: TCharToUTF8Table = (
160     #0,                 // #0
161     #1,                 // #1
162     #2,                 // #2
163     #3,                 // #3
164     #4,                 // #4
165     #5,                 // #5
166     #6,                 // #6
167     #7,                 // #7
168     #8,                 // #8
169     #9,                 // #9
170     #10,                // #10
171     #11,                // #11
172     #12,                // #12
173     #13,                // #13
174     #14,                // #14
175     #15,                // #15
176     #16,                // #16
177     #17,                // #17
178     #18,                // #18
179     #19,                // #19
180     #20,                // #20
181     #21,                // #21
182     #22,                // #22
183     #23,                // #23
184     #24,                // #24
185     #25,                // #25
186     #26,                // #26
187     #27,                // #27
188     #28,                // #28
189     #29,                // #29
190     #30,                // #30
191     #31,                // #31
192     ' ',                // ' '
193     '!',                // '!'
194     '"',                // '"'
195     '#',                // '#'
196     '$',                // '$'
197     '%',                // '%'
198     '&',                // '&'
199     '''',               // ''''
200     '(',                // '('
201     ')',                // ')'
202     '*',                // '*'
203     '+',                // '+'
204     ',',                // ','
205     '-',                // '-'
206     '.',                // '.'
207     '/',                // '/'
208     '0',                // '0'
209     '1',                // '1'
210     '2',                // '2'
211     '3',                // '3'
212     '4',                // '4'
213     '5',                // '5'
214     '6',                // '6'
215     '7',                // '7'
216     '8',                // '8'
217     '9',                // '9'
218     ':',                // ':'
219     ';',                // ';'
220     '<',                // '<'
221     '=',                // '='
222     '>',                // '>'
223     '?',                // '?'
224     '@',                // '@'
225     'A',                // 'A'
226     'B',                // 'B'
227     'C',                // 'C'
228     'D',                // 'D'
229     'E',                // 'E'
230     'F',                // 'F'
231     'G',                // 'G'
232     'H',                // 'H'
233     'I',                // 'I'
234     'J',                // 'J'
235     'K',                // 'K'
236     'L',                // 'L'
237     'M',                // 'M'
238     'N',                // 'N'
239     'O',                // 'O'
240     'P',                // 'P'
241     'Q',                // 'Q'
242     'R',                // 'R'
243     'S',                // 'S'
244     'T',                // 'T'
245     'U',                // 'U'
246     'V',                // 'V'
247     'W',                // 'W'
248     'X',                // 'X'
249     'Y',                // 'Y'
250     'Z',                // 'Z'
251     '[',                // '['
252     '\',                // '\'
253     ']',                // ']'
254     '^',                // '^'
255     '_',                // '_'
256     '`',                // '`'
257     'a',                // 'a'
258     'b',                // 'b'
259     'c',                // 'c'
260     'd',                // 'd'
261     'e',                // 'e'
262     'f',                // 'f'
263     'g',                // 'g'
264     'h',                // 'h'
265     'i',                // 'i'
266     'j',                // 'j'
267     'k',                // 'k'
268     'l',                // 'l'
269     'm',                // 'm'
270     'n',                // 'n'
271     'o',                // 'o'
272     'p',                // 'p'
273     'q',                // 'q'
274     'r',                // 'r'
275     's',                // 's'
276     't',                // 't'
277     'u',                // 'u'
278     'v',                // 'v'
279     'w',                // 'w'
280     'x',                // 'x'
281     'y',                // 'y'
282     'z',                // 'z'
283     '{',                // '{'
284     '|',                // '|'
285     '}',                // '}'
286     '~',                // '~'
287     #127,               // #127
288     #194#128,           // #128
289     #194#129,           // #129
290     #194#130,           // #130
291     #194#131,           // #131
292     #194#132,           // #132
293     #194#133,           // #133
294     #194#134,           // #134
295     #194#135,           // #135
296     #194#136,           // #136
297     #194#137,           // #137
298     #194#138,           // #138
299     #194#139,           // #139
300     #194#140,           // #140
301     #194#141,           // #141
302     #194#142,           // #142
303     #194#143,           // #143
304     #194#144,           // #144
305     #194#145,           // #145
306     #194#146,           // #146
307     #194#147,           // #147
308     #194#148,           // #148
309     #194#149,           // #149
310     #194#150,           // #150
311     #194#151,           // #151
312     #194#152,           // #152
313     #194#153,           // #153
314     #194#154,           // #154
315     #194#155,           // #155
316     #194#156,           // #156
317     #194#157,           // #157
318     #194#158,           // #158
319     #194#159,           // #159
320     #194#160,           // #160
321     #194#161,           // #161
322     #194#162,           // #162
323     #194#163,           // #163
324     #194#164,           // #164
325     #194#165,           // #165
326     #194#166,           // #166
327     #194#167,           // #167
328     #194#168,           // #168
329     #194#169,           // #169
330     #194#170,           // #170
331     #194#171,           // #171
332     #194#172,           // #172
333     #194#173,           // #173
334     #194#174,           // #174
335     #194#175,           // #175
336     #194#176,           // #176
337     #194#177,           // #177
338     #194#178,           // #178
339     #194#179,           // #179
340     #194#180,           // #180
341     #194#181,           // #181
342     #194#182,           // #182
343     #194#183,           // #183
344     #194#184,           // #184
345     #194#185,           // #185
346     #194#186,           // #186
347     #194#187,           // #187
348     #194#188,           // #188
349     #194#189,           // #189
350     #194#190,           // #190
351     #194#191,           // #191
352     #195#128,           // #192
353     #195#129,           // #193
354     #195#130,           // #194
355     #195#131,           // #195
356     #195#132,           // #196
357     #195#133,           // #197
358     #195#134,           // #198
359     #195#135,           // #199
360     #195#136,           // #200
361     #195#137,           // #201
362     #195#138,           // #202
363     #195#139,           // #203
364     #195#140,           // #204
365     #195#141,           // #205
366     #195#142,           // #206
367     #195#143,           // #207
368     #195#144,           // #208
369     #195#145,           // #209
370     #195#146,           // #210
371     #195#147,           // #211
372     #195#148,           // #212
373     #195#149,           // #213
374     #195#150,           // #214
375     #195#151,           // #215
376     #195#152,           // #216
377     #195#153,           // #217
378     #195#154,           // #218
379     #195#155,           // #219
380     #195#156,           // #220
381     #195#157,           // #221
382     #195#158,           // #222
383     #195#159,           // #223
384     #195#160,           // #224
385     #195#161,           // #225
386     #195#162,           // #226
387     #195#163,           // #227
388     #195#164,           // #228
389     #195#165,           // #229
390     #195#166,           // #230
391     #195#167,           // #231
392     #195#168,           // #232
393     #195#169,           // #233
394     #195#170,           // #234
395     #195#171,           // #235
396     #195#172,           // #236
397     #195#173,           // #237
398     #195#174,           // #238
399     #195#175,           // #239
400     #195#176,           // #240
401     #195#177,           // #241
402     #195#178,           // #242
403     #195#179,           // #243
404     #195#180,           // #244
405     #195#181,           // #245
406     #195#182,           // #246
407     #195#183,           // #247
408     #195#184,           // #248
409     #195#185,           // #249
410     #195#186,           // #250
411     #195#187,           // #251
412     #195#188,           // #252
413     #195#189,           // #253
414     #195#190,           // #254
415     #195#191            // #255
416   );
417
418   ArrayCP1250ToUTF8: TCharToUTF8Table = (
419     #0,                 // #0
420     #1,                 // #1
421     #2,                 // #2
422     #3,                 // #3
423     #4,                 // #4
424     #5,                 // #5
425     #6,                 // #6
426     #7,                 // #7
427     #8,                 // #8
428     #9,                 // #9
429     #10,                // #10
430     #11,                // #11
431     #12,                // #12
432     #13,                // #13
433     #14,                // #14
434     #15,                // #15
435     #16,                // #16
436     #17,                // #17
437     #18,                // #18
438     #19,                // #19
439     #20,                // #20
440     #21,                // #21
441     #22,                // #22
442     #23,                // #23
443     #24,                // #24
444     #25,                // #25
445     #26,                // #26
446     #27,                // #27
447     #28,                // #28
448     #29,                // #29
449     #30,                // #30
450     #31,                // #31
451     ' ',                // ' '
452     '!',                // '!'
453     '"',                // '"'
454     '#',                // '#'
455     '$',                // '$'
456     '%',                // '%'
457     '&',                // '&'
458     '''',               // ''''
459     '(',                // '('
460     ')',                // ')'
461     '*',                // '*'
462     '+',                // '+'
463     ',',                // ','
464     '-',                // '-'
465     '.',                // '.'
466     '/',                // '/'
467     '0',                // '0'
468     '1',                // '1'
469     '2',                // '2'
470     '3',                // '3'
471     '4',                // '4'
472     '5',                // '5'
473     '6',                // '6'
474     '7',                // '7'
475     '8',                // '8'
476     '9',                // '9'
477     ':',                // ':'
478     ';',                // ';'
479     '<',                // '<'
480     '=',                // '='
481     '>',                // '>'
482     '?',                // '?'
483     '@',                // '@'
484     'A',                // 'A'
485     'B',                // 'B'
486     'C',                // 'C'
487     'D',                // 'D'
488     'E',                // 'E'
489     'F',                // 'F'
490     'G',                // 'G'
491     'H',                // 'H'
492     'I',                // 'I'
493     'J',                // 'J'
494     'K',                // 'K'
495     'L',                // 'L'
496     'M',                // 'M'
497     'N',                // 'N'
498     'O',                // 'O'
499     'P',                // 'P'
500     'Q',                // 'Q'
501     'R',                // 'R'
502     'S',                // 'S'
503     'T',                // 'T'
504     'U',                // 'U'
505     'V',                // 'V'
506     'W',                // 'W'
507     'X',                // 'X'
508     'Y',                // 'Y'
509     'Z',                // 'Z'
510     '[',                // '['
511     '\',                // '\'
512     ']',                // ']'
513     '^',                // '^'
514     '_',                // '_'
515     '`',                // '`'
516     'a',                // 'a'
517     'b',                // 'b'
518     'c',                // 'c'
519     'd',                // 'd'
520     'e',                // 'e'
521     'f',                // 'f'
522     'g',                // 'g'
523     'h',                // 'h'
524     'i',                // 'i'
525     'j',                // 'j'
526     'k',                // 'k'
527     'l',                // 'l'
528     'm',                // 'm'
529     'n',                // 'n'
530     'o',                // 'o'
531     'p',                // 'p'
532     'q',                // 'q'
533     'r',                // 'r'
534     's',                // 's'
535     't',                // 't'
536     'u',                // 'u'
537     'v',                // 'v'
538     'w',                // 'w'
539     'x',                // 'x'
540     'y',                // 'y'
541     'z',                // 'z'
542     '{',                // '{'
543     '|',                // '|'
544     '}',                // '}'
545     '~',                // '~'
546     #127,               // #127
547     #226#130#172,       // #128
548     '',                 // #129
549     #226#128#154,       // #130
550     '',                 // #131
551     #226#128#158,       // #132
552     #226#128#166,       // #133
553     #226#128#160,       // #134
554     #226#128#161,       // #135
555     '',                 // #136
556     #226#128#176,       // #137
557     #197#160,           // #138
558     #226#128#185,       // #139
559     #197#154,           // #140
560     #197#164,           // #141
561     #197#189,           // #142
562     #197#185,           // #143
563     '',                 // #144
564     #226#128#152,       // #145
565     #226#128#153,       // #146
566     #226#128#156,       // #147
567     #226#128#157,       // #148
568     #226#128#162,       // #149
569     #226#128#147,       // #150
570     #226#128#148,       // #151
571     '',                 // #152
572     #226#132#162,       // #153
573     #197#161,           // #154
574     #226#128#186,       // #155
575     #197#155,           // #156
576     #197#165,           // #157
577     #197#190,           // #158
578     #197#186,           // #159
579     #194#160,           // #160
580     #203#135,           // #161
581     #203#152,           // #162
582     #197#129,           // #163
583     #194#164,           // #164
584     #196#132,           // #165
585     #194#166,           // #166
586     #194#167,           // #167
587     #194#168,           // #168
588     #194#169,           // #169
589     #197#158,           // #170
590     #194#171,           // #171
591     #194#172,           // #172
592     #194#173,           // #173
593     #194#174,           // #174
594     #197#187,           // #175
595     #194#176,           // #176
596     #194#177,           // #177
597     #203#155,           // #178
598     #197#130,           // #179
599     #194#180,           // #180
600     #194#181,           // #181
601     #194#182,           // #182
602     #194#183,           // #183
603     #194#184,           // #184
604     #196#133,           // #185
605     #197#159,           // #186
606     #194#187,           // #187
607     #196#189,           // #188
608     #203#157,           // #189
609     #196#190,           // #190
610     #197#188,           // #191
611     #197#148,           // #192
612     #195#129,           // #193
613     #195#130,           // #194
614     #196#130,           // #195
615     #195#132,           // #196
616     #196#185,           // #197
617     #196#134,           // #198
618     #195#135,           // #199
619     #196#140,           // #200
620     #195#137,           // #201
621     #196#152,           // #202
622     #195#139,           // #203
623     #196#154,           // #204
624     #195#141,           // #205
625     #195#142,           // #206
626     #196#142,           // #207
627     #196#144,           // #208
628     #197#131,           // #209
629     #197#135,           // #210
630     #195#147,           // #211
631     #195#148,           // #212
632     #197#144,           // #213
633     #195#150,           // #214
634     #195#151,           // #215
635     #197#152,           // #216
636     #197#174,           // #217
637     #195#154,           // #218
638     #197#176,           // #219
639     #195#156,           // #220
640     #195#157,           // #221
641     #197#162,           // #222
642     #195#159,           // #223
643     #197#149,           // #224
644     #195#161,           // #225
645     #195#162,           // #226
646     #196#131,           // #227
647     #195#164,           // #228
648     #196#186,           // #229
649     #196#135,           // #230
650     #195#167,           // #231
651     #196#141,           // #232
652     #195#169,           // #233
653     #196#153,           // #234
654     #195#171,           // #235
655     #196#155,           // #236
656     #195#173,           // #237
657     #195#174,           // #238
658     #196#143,           // #239
659     #196#145,           // #240
660     #197#132,           // #241
661     #197#136,           // #242
662     #195#179,           // #243
663     #195#180,           // #244
664     #197#145,           // #245
665     #195#182,           // #246
666     #195#183,           // #247
667     #197#153,           // #248
668     #197#175,           // #249
669     #195#186,           // #250
670     #197#177,           // #251
671     #195#188,           // #252
672     #195#189,           // #253
673     #197#163,           // #254
674     #203#153            // #255
675   );
676
677   ArrayCP1251ToUTF8: TCharToUTF8Table = (
678     #0,                 // #0
679     #1,                 // #1
680     #2,                 // #2
681     #3,                 // #3
682     #4,                 // #4
683     #5,                 // #5
684     #6,                 // #6
685     #7,                 // #7
686     #8,                 // #8
687     #9,                 // #9
688     #10,                // #10
689     #11,                // #11
690     #12,                // #12
691     #13,                // #13
692     #14,                // #14
693     #15,                // #15
694     #16,                // #16
695     #17,                // #17
696     #18,                // #18
697     #19,                // #19
698     #20,                // #20
699     #21,                // #21
700     #22,                // #22
701     #23,                // #23
702     #24,                // #24
703     #25,                // #25
704     #26,                // #26
705     #27,                // #27
706     #28,                // #28
707     #29,                // #29
708     #30,                // #30
709     #31,                // #31
710     ' ',                // ' '
711     '!',                // '!'
712     '"',                // '"'
713     '#',                // '#'
714     '$',                // '$'
715     '%',                // '%'
716     '&',                // '&'
717     '''',               // ''''
718     '(',                // '('
719     ')',                // ')'
720     '*',                // '*'
721     '+',                // '+'
722     ',',                // ','
723     '-',                // '-'
724     '.',                // '.'
725     '/',                // '/'
726     '0',                // '0'
727     '1',                // '1'
728     '2',                // '2'
729     '3',                // '3'
730     '4',                // '4'
731     '5',                // '5'
732     '6',                // '6'
733     '7',                // '7'
734     '8',                // '8'
735     '9',                // '9'
736     ':',                // ':'
737     ';',                // ';'
738     '<',                // '<'
739     '=',                // '='
740     '>',                // '>'
741     '?',                // '?'
742     '@',                // '@'
743     'A',                // 'A'
744     'B',                // 'B'
745     'C',                // 'C'
746     'D',                // 'D'
747     'E',                // 'E'
748     'F',                // 'F'
749     'G',                // 'G'
750     'H',                // 'H'
751     'I',                // 'I'
752     'J',                // 'J'
753     'K',                // 'K'
754     'L',                // 'L'
755     'M',                // 'M'
756     'N',                // 'N'
757     'O',                // 'O'
758     'P',                // 'P'
759     'Q',                // 'Q'
760     'R',                // 'R'
761     'S',                // 'S'
762     'T',                // 'T'
763     'U',                // 'U'
764     'V',                // 'V'
765     'W',                // 'W'
766     'X',                // 'X'
767     'Y',                // 'Y'
768     'Z',                // 'Z'
769     '[',                // '['
770     '\',                // '\'
771     ']',                // ']'
772     '^',                // '^'
773     '_',                // '_'
774     '`',                // '`'
775     'a',                // 'a'
776     'b',                // 'b'
777     'c',                // 'c'
778     'd',                // 'd'
779     'e',                // 'e'
780     'f',                // 'f'
781     'g',                // 'g'
782     'h',                // 'h'
783     'i',                // 'i'
784     'j',                // 'j'
785     'k',                // 'k'
786     'l',                // 'l'
787     'm',                // 'm'
788     'n',                // 'n'
789     'o',                // 'o'
790     'p',                // 'p'
791     'q',                // 'q'
792     'r',                // 'r'
793     's',                // 's'
794     't',                // 't'
795     'u',                // 'u'
796     'v',                // 'v'
797     'w',                // 'w'
798     'x',                // 'x'
799     'y',                // 'y'
800     'z',                // 'z'
801     '{',                // '{'
802     '|',                // '|'
803     '}',                // '}'
804     '~',                // '~'
805     #127,               // #127
806     #208#130,           // #128
807     #208#131,           // #129
808     #226#128#154,       // #130
809     #209#147,           // #131
810     #226#128#158,       // #132
811     #226#128#166,       // #133
812     #226#128#160,       // #134
813     #226#128#161,       // #135
814     #226#130#172,       // #136
815     #226#128#176,       // #137
816     #208#137,           // #138
817     #226#128#185,       // #139
818     #208#138,           // #140
819     #208#140,           // #141
820     #208#139,           // #142
821     #208#143,           // #143
822     #209#146,           // #144
823     #226#128#152,       // #145
824     #226#128#153,       // #146
825     #226#128#156,       // #147
826     #226#128#157,       // #148
827     #226#128#162,       // #149
828     #226#128#147,       // #150
829     #226#128#148,       // #151
830     '',                 // #152
831     #226#132#162,       // #153
832     #209#153,           // #154
833     #226#128#186,       // #155
834     #209#154,           // #156
835     #209#156,           // #157
836     #209#155,           // #158
837     #209#159,           // #159
838     #194#160,           // #160
839     #208#142,           // #161
840     #209#158,           // #162
841     #208#136,           // #163
842     #194#164,           // #164
843     #210#144,           // #165
844     #194#166,           // #166
845     #194#167,           // #167
846     #208#129,           // #168
847     #194#169,           // #169
848     #208#132,           // #170
849     #194#171,           // #171
850     #194#172,           // #172
851     #194#173,           // #173
852     #194#174,           // #174
853     #208#135,           // #175
854     #194#176,           // #176
855     #194#177,           // #177
856     #208#134,           // #178
857     #209#150,           // #179
858     #210#145,           // #180
859     #194#181,           // #181
860     #194#182,           // #182
861     #194#183,           // #183
862     #209#145,           // #184
863     #226#132#150,       // #185
864     #209#148,           // #186
865     #194#187,           // #187
866     #209#152,           // #188
867     #208#133,           // #189
868     #209#149,           // #190
869     #209#151,           // #191
870     #208#144,           // #192
871     #208#145,           // #193
872     #208#146,           // #194
873     #208#147,           // #195
874     #208#148,           // #196
875     #208#149,           // #197
876     #208#150,           // #198
877     #208#151,           // #199
878     #208#152,           // #200
879     #208#153,           // #201
880     #208#154,           // #202
881     #208#155,           // #203
882     #208#156,           // #204
883     #208#157,           // #205
884     #208#158,           // #206
885     #208#159,           // #207
886     #208#160,           // #208
887     #208#161,           // #209
888     #208#162,           // #210
889     #208#163,           // #211
890     #208#164,           // #212
891     #208#165,           // #213
892     #208#166,           // #214
893     #208#167,           // #215
894     #208#168,           // #216
895     #208#169,           // #217
896     #208#170,           // #218
897     #208#171,           // #219
898     #208#172,           // #220
899     #208#173,           // #221
900     #208#174,           // #222
901     #208#175,           // #223
902     #208#176,           // #224
903     #208#177,           // #225
904     #208#178,           // #226
905     #208#179,           // #227
906     #208#180,           // #228
907     #208#181,           // #229
908     #208#182,           // #230
909     #208#183,           // #231
910     #208#184,           // #232
911     #208#185,           // #233
912     #208#186,           // #234
913     #208#187,           // #235
914     #208#188,           // #236
915     #208#189,           // #237
916     #208#190,           // #238
917     #208#191,           // #239
918     #209#128,           // #240
919     #209#129,           // #241
920     #209#130,           // #242
921     #209#131,           // #243
922     #209#132,           // #244
923     #209#133,           // #245
924     #209#134,           // #246
925     #209#135,           // #247
926     #209#136,           // #248
927     #209#137,           // #249
928     #209#138,           // #250
929     #209#139,           // #251
930     #209#140,           // #252
931     #209#141,           // #253
932     #209#142,           // #254
933     #209#143            // #255
934   );
935
936   ArrayCP1252ToUTF8: TCharToUTF8Table = (
937     #0,                 // #0
938     #1,                 // #1
939     #2,                 // #2
940     #3,                 // #3
941     #4,                 // #4
942     #5,                 // #5
943     #6,                 // #6
944     #7,                 // #7
945     #8,                 // #8
946     #9,                 // #9
947     #10,                // #10
948     #11,                // #11
949     #12,                // #12
950     #13,                // #13
951     #14,                // #14
952     #15,                // #15
953     #16,                // #16
954     #17,                // #17
955     #18,                // #18
956     #19,                // #19
957     #20,                // #20
958     #21,                // #21
959     #22,                // #22
960     #23,                // #23
961     #24,                // #24
962