2
0

syscodepages.inc 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676
  1. {%MainUnit sysutils.pp}
  2. {
  3. This file is in the public domain.
  4. }
  5. {
  6. This codepage information is based on what is documented at
  7. 1. http://wiki.whatwg.org/wiki/Web_Encodings
  8. 2. http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
  9. This file only uses bare facts and API information from the above pages
  10. rather than descriptions or code, neither of which are copyrightable.
  11. }
  12. type
  13. TCodePageHashEntry = record
  14. hash: LongWord;
  15. cp: TSystemCodePage;
  16. name: PAnsiChar;
  17. end;
  18. const
  19. { this array contains many labels for the same codepage.
  20. all labels are stored in lowercase and each record has a
  21. hash value for the fast search. hash value was get using
  22. SysUtils.HashName() function }
  23. CodePageHashes: array[0..421] of TCodePageHashEntry = (
  24. (hash: $00000310; cp: 28591; name: 'l1'),
  25. (hash: $00000320; cp: 28592; name: 'l2'),
  26. (hash: $00000330; cp: 28593; name: 'l3'),
  27. (hash: $00000340; cp: 28594; name: 'l4'),
  28. (hash: $00000350; cp: 28599; name: 'l5'),
  29. (hash: $00000390; cp: 28605; name: 'l9'),
  30. (hash: $00000530; cp: 20127; name: 'us'),
  31. (hash: $00003670; cp: 437; name: '437'),
  32. (hash: $000046B0; cp: 936; name: 'gbk'),
  33. (hash: $00004DB0; cp: 3021; name: 'mik'),
  34. (hash: $00005390; cp: 20866; name: 'koi'),
  35. (hash: $00005760; cp: 20105; name: 'irv'),
  36. (hash: $0004DA50; cp: 950; name: 'big5'),
  37. (hash: $0004EE30; cp: 932; name: 'sjis'),
  38. (hash: $00053C80; cp: 20866; name: 'koi8'),
  39. (hash: $000CB080; cp: 50931; name: 'x-ebcdic-japaneseanduscanada'),
  40. (hash: $0014F3C0; cp: 10010; name: 'x-mac-romanian'),
  41. (hash: $001B2E30; cp: 1141; name: 'ebcdic-de-273+euro'),
  42. (hash: $0028C1E0; cp: 20838; name: 'ibm-thai'),
  43. (hash: $0031A930; cp: 51932; name: 'x-euc'),
  44. (hash: $0031D450; cp: 20105; name: 'x-ia5'),
  45. (hash: $0033BCF0; cp: 858; name: 'ibm00858'),
  46. (hash: $0033C130; cp: 20924; name: 'ibm00924'),
  47. (hash: $00343300; cp: 1047; name: 'ibm01047'),
  48. (hash: $00344300; cp: 1147; name: 'ibm01147'),
  49. (hash: $00344310; cp: 1146; name: 'ibm01146'),
  50. (hash: $00344320; cp: 1145; name: 'ibm01145'),
  51. (hash: $00344330; cp: 1144; name: 'ibm01144'),
  52. (hash: $00344340; cp: 1143; name: 'ibm01143'),
  53. (hash: $00344350; cp: 1142; name: 'ibm01142'),
  54. (hash: $00344360; cp: 1141; name: 'ibm01141'),
  55. (hash: $00344370; cp: 1140; name: 'ibm01140'),
  56. (hash: $003443E0; cp: 1149; name: 'ibm01149'),
  57. (hash: $003443F0; cp: 1148; name: 'ibm01148'),
  58. (hash: $003F4900; cp: 28594; name: 'csisolatin4'),
  59. (hash: $003F4910; cp: 28599; name: 'csisolatin5'),
  60. (hash: $003F4950; cp: 28591; name: 'csisolatin1'),
  61. (hash: $003F4960; cp: 28592; name: 'csisolatin2'),
  62. (hash: $003F4970; cp: 28593; name: 'csisolatin3'),
  63. (hash: $003F49D0; cp: 28605; name: 'csisolatin9'),
  64. (hash: $00486020; cp: 1200; name: 'ucs-2'),
  65. (hash: $00511B20; cp: 936; name: 'cn-gb'),
  66. (hash: $00533670; cp: 37; name: 'cp037'),
  67. (hash: $00535A30; cp: 20273; name: 'cp273'),
  68. (hash: $00535A80; cp: 20278; name: 'cp278'),
  69. (hash: $00535B00; cp: 20280; name: 'cp280'),
  70. (hash: $00535B40; cp: 20284; name: 'cp284'),
  71. (hash: $00535B50; cp: 20285; name: 'cp285'),
  72. (hash: $00535C00; cp: 20290; name: 'cp290'),
  73. (hash: $00535C70; cp: 20297; name: 'cp297'),
  74. (hash: $00536970; cp: 20127; name: 'cp367'),
  75. (hash: $00537500; cp: 20420; name: 'cp420'),
  76. (hash: $00537530; cp: 20423; name: 'cp423'),
  77. (hash: $00537540; cp: 20424; name: 'cp424'),
  78. (hash: $00537670; cp: 437; name: 'cp437'),
  79. (hash: $00538300; cp: 500; name: 'cp500'),
  80. (hash: $0053B490; cp: 28591; name: 'cp819'),
  81. (hash: $0053B800; cp: 850; name: 'cp850'),
  82. (hash: $0053B820; cp: 852; name: 'cp852'),
  83. (hash: $0053B850; cp: 855; name: 'cp855'),
  84. (hash: $0053B860; cp: 856; name: 'cp856'),
  85. (hash: $0053B870; cp: 857; name: 'cp857'),
  86. (hash: $0053B880; cp: 858; name: 'cp858'),
  87. (hash: $0053B900; cp: 860; name: 'cp860'),
  88. (hash: $0053B910; cp: 861; name: 'cp861'),
  89. (hash: $0053B920; cp: 862; name: 'cp862'),
  90. (hash: $0053B930; cp: 863; name: 'cp863'),
  91. (hash: $0053B940; cp: 864; name: 'cp864'),
  92. (hash: $0053B950; cp: 865; name: 'cp865'),
  93. (hash: $0053B960; cp: 866; name: 'cp866'),
  94. (hash: $0053B990; cp: 869; name: 'cp869'),
  95. (hash: $0053BA00; cp: 870; name: 'cp870'),
  96. (hash: $0053BA10; cp: 20871; name: 'cp871'),
  97. (hash: $0053BA50; cp: 875; name: 'cp875'),
  98. (hash: $0053BB00; cp: 20880; name: 'cp880'),
  99. (hash: $0053C350; cp: 20905; name: 'cp905'),
  100. (hash: $0053C520; cp: 1361; name: 'johab'),
  101. (hash: $0053C600; cp: 50930; name: 'cp930'),
  102. (hash: $0053C630; cp: 50933; name: 'cp933'),
  103. (hash: $0053C650; cp: 50935; name: 'cp935'),
  104. (hash: $0053C670; cp: 50937; name: 'cp937'),
  105. (hash: $0053C690; cp: 50939; name: 'cp939'),
  106. (hash: $0053CD20; cp: 20866; name: 'koi8r'),
  107. (hash: $005699B0; cp: 28597; name: 'greek'),
  108. (hash: $00577D90; cp: 20127; name: 'ascii'),
  109. (hash: $00589070; cp: 65000; name: 'utf-7'),
  110. (hash: $00589080; cp: 65001; name: 'utf-8'),
  111. (hash: $00AA6740; cp: 20127; name: 'iso_646.irv:1991'),
  112. (hash: $00C06790; cp: 10017; name: 'x-mac-ukrainian'),
  113. (hash: $0116DA00; cp: 950; name: 'cn-big5'),
  114. (hash: $013CBF20; cp: 28598; name: 'iso-8859-8 visual'),
  115. (hash: $01404000; cp: 28597; name: 'ecma-118'),
  116. (hash: $014040C0; cp: 28596; name: 'ecma-114'),
  117. (hash: $014D8730; cp: 932; name: 'cswindows31j'),
  118. (hash: $01561470; cp: 10029; name: 'x-mac-ce'),
  119. (hash: $016778F0; cp: 20127; name: 'us-ascii'),
  120. (hash: $01689670; cp: 949; name: 'ks-c5601'),
  121. (hash: $0180E440; cp: 932; name: 'x-ms-cp932'),
  122. (hash: $01964730; cp: 949; name: 'ks_c_5601-1989'),
  123. (hash: $019647D0; cp: 949; name: 'ks_c_5601-1987'),
  124. (hash: $01D4A080; cp: 20002; name: 'x-chinese-eten'),
  125. (hash: $01D4A2B0; cp: 950; name: 'big5-hkscs'),
  126. (hash: $01D4A5A0; cp: 20002; name: 'x_chinese-eten'),
  127. (hash: $01DF6090; cp: 1148; name: 'ebcdic-international-500+euro'),
  128. (hash: $01E550A0; cp: 936; name: 'iso-ir-58'),
  129. (hash: $01F48CD0; cp: 10006; name: 'x-mac-greek'),
  130. (hash: $021E55E0; cp: 20127; name: 'iso-ir-6'),
  131. (hash: $0220A600; cp: 708; name: 'asmo-708'),
  132. (hash: $022E2E20; cp: 1146; name: 'ebcdic-gb-285+euro'),
  133. (hash: $023BBA40; cp: 50225; name: 'iso-2022-kr-7bit'),
  134. (hash: $023CBA40; cp: 51949; name: 'iso-2022-kr-8bit'),
  135. (hash: $023ECEB0; cp: 10082; name: 'x-mac-croatian'),
  136. (hash: $02669990; cp: 28596; name: 'csisolatinarabic'),
  137. (hash: $02997D70; cp: 20106; name: 'din_66003'),
  138. (hash: $02D83800; cp: 1200; name: 'unicode'),
  139. (hash: $02DBAF90; cp: 1200; name: 'iso-10646-ucs-2'),
  140. (hash: $02E6CC40; cp: 1258; name: 'windows-1258'),
  141. (hash: $02E6CC80; cp: 1254; name: 'windows-1254'),
  142. (hash: $02E6CC90; cp: 1255; name: 'windows-1255'),
  143. (hash: $02E6CCA0; cp: 1256; name: 'windows-1256'),
  144. (hash: $02E6CCB0; cp: 1257; name: 'windows-1257'),
  145. (hash: $02E6CCC0; cp: 1250; name: 'windows-1250'),
  146. (hash: $02E6CCD0; cp: 1251; name: 'windows-1251'),
  147. (hash: $02E6CCE0; cp: 1252; name: 'windows-1252'),
  148. (hash: $02E6CCF0; cp: 1253; name: 'windows-1253'),
  149. (hash: $02F078A0; cp: 20127; name: 'ansi_x3.4-1968'),
  150. (hash: $02F07A40; cp: 20127; name: 'ansi_x3.4-1986'),
  151. (hash: $030D3F50; cp: 50220; name: 'iso-2022-jp'),
  152. (hash: $030D3F50; cp: 50222; name: 'iso-2022-jp'),
  153. (hash: $030D4070; cp: 50225; name: 'iso-2022-kr'),
  154. (hash: $03163790; cp: 1252; name: 'x-ansi'),
  155. (hash: $0327EE30; cp: 932; name: 'x-sjis'),
  156. (hash: $0333B8D0; cp: 858; name: 'cp00858'),
  157. (hash: $0333C510; cp: 20924; name: 'cp00924'),
  158. (hash: $03344700; cp: 1145; name: 'cp01145'),
  159. (hash: $03344710; cp: 1144; name: 'cp01144'),
  160. (hash: $03344720; cp: 1147; name: 'cp01147'),
  161. (hash: $03344730; cp: 1146; name: 'cp01146'),
  162. (hash: $03344740; cp: 1141; name: 'cp01141'),
  163. (hash: $03344750; cp: 1140; name: 'cp01140'),
  164. (hash: $03344760; cp: 1143; name: 'cp01143'),
  165. (hash: $03344770; cp: 1142; name: 'cp01142'),
  166. (hash: $033447C0; cp: 1149; name: 'cp01149'),
  167. (hash: $033447D0; cp: 1148; name: 'cp01148'),
  168. (hash: $03392E20; cp: 1145; name: 'ebcdic-es-284+euro'),
  169. (hash: $03530290; cp: 20001; name: 'x-cp20001'),
  170. (hash: $035302B0; cp: 20003; name: 'x-cp20003'),
  171. (hash: $035302C0; cp: 20004; name: 'x-cp20004'),
  172. (hash: $035302D0; cp: 20005; name: 'x-cp20005'),
  173. (hash: $03536810; cp: 20269; name: 'x-cp20269'),
  174. (hash: $03536890; cp: 20261; name: 'x-cp20261'),
  175. (hash: $0353F610; cp: 20949; name: 'x-cp20949'),
  176. (hash: $0353F7E0; cp: 20936; name: 'x-cp20936'),
  177. (hash: $035404F0; cp: 21027; name: 'x-cp21027'),
  178. (hash: $03836410; cp: 50229; name: 'x-cp50229'),
  179. (hash: $038364F0; cp: 50227; name: 'x-cp50227'),
  180. (hash: $03BD7590; cp: 28598; name: 'logical'),
  181. (hash: $03CB2700; cp: 21866; name: 'koi8-ru'),
  182. (hash: $03F199E0; cp: 51932; name: 'iso-2022-jpeuc'),
  183. (hash: $03F62B00; cp: 932; name: 'ms_kanji'),
  184. (hash: $04556420; cp: 936; name: 'gb2312'),
  185. (hash: $0460A550; cp: 720; name: 'dos-720'),
  186. (hash: $0460B970; cp: 862; name: 'dos-862'),
  187. (hash: $0460BA10; cp: 874; name: 'dos-874'),
  188. (hash: $0468E110; cp: 28591; name: 'latin1'),
  189. (hash: $0468E120; cp: 28592; name: 'latin2'),
  190. (hash: $0468E130; cp: 28593; name: 'latin3'),
  191. (hash: $0468E140; cp: 28594; name: 'latin4'),
  192. (hash: $0468E150; cp: 28599; name: 'latin5'),
  193. (hash: $0468E190; cp: 28605; name: 'latin9'),
  194. (hash: $046F1FD0; cp: 28593; name: 'iso_8859-3:1988'),
  195. (hash: $04703670; cp: 37; name: 'ibm037'),
  196. (hash: $04705A30; cp: 20273; name: 'ibm273'),
  197. (hash: $04705A70; cp: 20277; name: 'ibm277'),
  198. (hash: $04705A80; cp: 20278; name: 'ibm278'),
  199. (hash: $04705B00; cp: 20280; name: 'ibm280'),
  200. (hash: $04705B40; cp: 20284; name: 'ibm284'),
  201. (hash: $04705B50; cp: 20285; name: 'ibm285'),
  202. (hash: $04705C00; cp: 20290; name: 'ibm290'),
  203. (hash: $04705C70; cp: 20297; name: 'ibm297'),
  204. (hash: $04706970; cp: 20127; name: 'ibm367'),
  205. (hash: $04707500; cp: 20420; name: 'ibm420'),
  206. (hash: $04707530; cp: 20423; name: 'ibm423'),
  207. (hash: $04707540; cp: 20424; name: 'ibm424'),
  208. (hash: $04707670; cp: 437; name: 'ibm437'),
  209. (hash: $04708300; cp: 500; name: 'ibm500'),
  210. (hash: $0470A670; cp: 737; name: 'ibm737'),
  211. (hash: $0470AA50; cp: 775; name: 'ibm775'),
  212. (hash: $0470B490; cp: 28591; name: 'ibm819'),
  213. (hash: $0470B800; cp: 850; name: 'ibm850'),
  214. (hash: $0470B820; cp: 852; name: 'ibm852'),
  215. (hash: $0470B850; cp: 855; name: 'ibm855'),
  216. (hash: $0470B870; cp: 857; name: 'ibm857'),
  217. (hash: $0470B900; cp: 860; name: 'ibm860'),
  218. (hash: $0470B910; cp: 861; name: 'ibm861'),
  219. (hash: $0470B920; cp: 862; name: 'ibm862'),
  220. (hash: $0470B930; cp: 863; name: 'ibm863'),
  221. (hash: $0470B940; cp: 864; name: 'ibm864'),
  222. (hash: $0470B950; cp: 865; name: 'ibm865'),
  223. (hash: $0470B960; cp: 866; name: 'ibm866'),
  224. (hash: $0470B990; cp: 869; name: 'ibm869'),
  225. (hash: $0470BA00; cp: 870; name: 'ibm870'),
  226. (hash: $0470BA10; cp: 20871; name: 'ibm871'),
  227. (hash: $0470BB00; cp: 20880; name: 'ibm880'),
  228. (hash: $0470C350; cp: 20905; name: 'ibm905'),
  229. (hash: $04976A70; cp: 28598; name: 'hebrew'),
  230. (hash: $04A2C090; cp: 28597; name: 'elot_928'),
  231. (hash: $04A715E0; cp: 20106; name: 'german'),
  232. (hash: $04E895C0; cp: 28598; name: 'visual'),
  233. (hash: $0500B590; cp: 52936; name: 'hz-gb-2312'),
  234. (hash: $0514BA10; cp: 10001; name: 'x-mac-japanese'),
  235. (hash: $05343550; cp: 21025; name: 'cp1025'),
  236. (hash: $05343560; cp: 1026; name: 'cp1026'),
  237. (hash: $05345860; cp: 1256; name: 'cp1256'),
  238. (hash: $0535A1D0; cp: 28595; name: 'csisolatincyrillic'),
  239. (hash: $05363510; cp: 3021; name: 'cp3021'),
  240. (hash: $053CB220; cp: 20866; name: 'koi8-r'),
  241. (hash: $053CB250; cp: 21866; name: 'koi8-u'),
  242. (hash: $054368A0; cp: 10079; name: 'x-mac-icelandic'),
  243. (hash: $05443B20; cp: 10004; name: 'x-mac-arabic'),
  244. (hash: $054695E0; cp: 949; name: 'korean'),
  245. (hash: $054B3640; cp: 54936; name: 'gb18030'),
  246. (hash: $05612050; cp: 936; name: 'csgb231280'),
  247. (hash: $05628720; cp: 50221; name: 'csiso2022jp'),
  248. (hash: $05629800; cp: 50225; name: 'csiso2022kr'),
  249. (hash: $05645F50; cp: 936; name: 'gb231280'),
  250. (hash: $05656D30; cp: 28596; name: 'arabic'),
  251. (hash: $05699E80; cp: 28597; name: 'greek8'),
  252. (hash: $056F1FD0; cp: 28594; name: 'iso_8859-4:1988'),
  253. (hash: $0576DA50; cp: 950; name: 'csbig5'),
  254. (hash: $05890460; cp: 1200; name: 'utf-16'),
  255. (hash: $05890620; cp: 12000; name: 'utf-32'),
  256. (hash: $059617E0; cp: 51936; name: 'euc-cn'),
  257. (hash: $05961F00; cp: 20932; name: 'euc-jp'),
  258. (hash: $05961F00; cp: 51932; name: 'euc-jp'),
  259. (hash: $05962020; cp: 51949; name: 'euc-kr'),
  260. (hash: $05E69130; cp: 20424; name: 'ebcdic-cp-he'),
  261. (hash: $05E69140; cp: 20423; name: 'ebcdic-cp-gr'),
  262. (hash: $05E69320; cp: 20280; name: 'ebcdic-cp-it'),
  263. (hash: $05E69350; cp: 20871; name: 'ebcdic-cp-is'),
  264. (hash: $05E695D0; cp: 20277; name: 'ebcdic-cp-dk'),
  265. (hash: $05E69640; cp: 20285; name: 'ebcdic-cp-gb'),
  266. (hash: $05E69640; cp: 20297; name: 'ebcdic-cp-fr'),
  267. (hash: $05E69750; cp: 20284; name: 'ebcdic-cp-es'),
  268. (hash: $05E697F0; cp: 20278; name: 'ebcdic-cp-fi'),
  269. (hash: $05E69A70; cp: 37; name: 'ebcdic-cp-ca'),
  270. (hash: $05E69AE0; cp: 500; name: 'ebcdic-cp-ch'),
  271. (hash: $05E69B30; cp: 500; name: 'ebcdic-cp-be'),
  272. (hash: $05E6A120; cp: 37; name: 'ebcdic-cp-wt'),
  273. (hash: $05E6A330; cp: 870; name: 'ebcdic-cp-yu'),
  274. (hash: $05E6A440; cp: 20905; name: 'ebcdic-cp-tr'),
  275. (hash: $05E6A750; cp: 37; name: 'ebcdic-cp-us'),
  276. (hash: $05E6AA30; cp: 20278; name: 'ebcdic-cp-se'),
  277. (hash: $05E6AF90; cp: 20277; name: 'ebcdic-cp-no'),
  278. (hash: $05E6AFA0; cp: 37; name: 'ebcdic-cp-nl'),
  279. (hash: $0608C500; cp: 949; name: 'ks-c-5601'),
  280. (hash: $061DA1A0; cp: 20000; name: 'x-chinese-cns'),
  281. (hash: $062BE4C0; cp: 10021; name: 'x-mac-thai'),
  282. (hash: $06418950; cp: 936; name: 'gb_2312-80'),
  283. (hash: $06454E50; cp: 936; name: 'gb2312-80'),
  284. (hash: $066F1F20; cp: 28591; name: 'iso_8859-1:1987'),
  285. (hash: $06792030; cp: 1149; name: 'ebcdic-is-871+euro'),
  286. (hash: $06924780; cp: 20290; name: 'ebcdic-jp-kana'),
  287. (hash: $06B2E950; cp: 65000; name: 'csunicode11utf7'),
  288. (hash: $06B647D0; cp: 949; name: 'ks_c_5601_1987'),
  289. (hash: $06E108D0; cp: 28595; name: 'cyrillic'),
  290. (hash: $06E7B280; cp: 10002; name: 'x-mac-chinesetrad'),
  291. (hash: $06E915C0; cp: 10008; name: 'x-mac-chinesesimp'),
  292. (hash: $06EFA1A0; cp: 20000; name: 'x-chinese_cns'),
  293. (hash: $06F329A0; cp: 20833; name: 'x-ebcdic-koreanextended'),
  294. (hash: $07043520; cp: 1026; name: 'ibm1026'),
  295. (hash: $070462B0; cp: 1026; name: 'csibm1026'),
  296. (hash: $07289240; cp: 20838; name: 'csibmthai'),
  297. (hash: $0730C040; cp: 1149; name: 'ccsid01149'),
  298. (hash: $0730C050; cp: 1148; name: 'ccsid01148'),
  299. (hash: $0730C080; cp: 1145; name: 'ccsid01145'),
  300. (hash: $0730C090; cp: 1144; name: 'ccsid01144'),
  301. (hash: $0730C0A0; cp: 1147; name: 'ccsid01147'),
  302. (hash: $0730C0B0; cp: 1146; name: 'ccsid01146'),
  303. (hash: $0730C0C0; cp: 1141; name: 'ccsid01141'),
  304. (hash: $0730C0D0; cp: 1140; name: 'ccsid01140'),
  305. (hash: $0730C0E0; cp: 1143; name: 'ccsid01143'),
  306. (hash: $0730C0F0; cp: 1142; name: 'ccsid01142'),
  307. (hash: $07373F50; cp: 858; name: 'ccsid00858'),
  308. (hash: $07374290; cp: 20924; name: 'ccsid00924'),
  309. (hash: $0764A5A0; cp: 858; name: 'pc-multilingual-850+euro'),
  310. (hash: $07677DC0; cp: 20127; name: 'csascii'),
  311. (hash: $07689340; cp: 949; name: 'ksc5601'),
  312. (hash: $076F1F20; cp: 28592; name: 'iso_8859-2:1987'),
  313. (hash: $07782E20; cp: 1144; name: 'ebcdic-it-280+euro'),
  314. (hash: $07887930; cp: 20108; name: 'ns_4551-1'),
  315. (hash: $079716F0; cp: 10007; name: 'x-mac-cyrillic'),
  316. (hash: $07A98070; cp: 51949; name: 'cseuckr'),
  317. (hash: $07D90160; cp: 57008; name: 'x-iscii-ka'),
  318. (hash: $07D90220; cp: 57010; name: 'x-iscii-gu'),
  319. (hash: $07D90620; cp: 57002; name: 'x-iscii-de'),
  320. (hash: $07D90820; cp: 57003; name: 'x-iscii-be'),
  321. (hash: $07D90840; cp: 57006; name: 'x-iscii-as'),
  322. (hash: $07D91A50; cp: 57007; name: 'x-iscii-or'),
  323. (hash: $07D91F60; cp: 57009; name: 'x-iscii-ma'),
  324. (hash: $07D93620; cp: 57005; name: 'x-iscii-te'),
  325. (hash: $07D93660; cp: 57004; name: 'x-iscii-ta'),
  326. (hash: $07D93A60; cp: 57011; name: 'x-iscii-pa'),
  327. (hash: $07F788A0; cp: 20107; name: 'sen_850200_b'),
  328. (hash: $0803CD70; cp: 20866; name: 'cskoi8r'),
  329. (hash: $08345B00; cp: 1251; name: 'x-cp1251'),
  330. (hash: $08345B10; cp: 1250; name: 'x-cp1250'),
  331. (hash: $084A3840; cp: 65000; name: 'x-unicode-2-0-utf-7'),
  332. (hash: $084A38B0; cp: 65001; name: 'x-unicode-2-0-utf-8'),
  333. (hash: $084A8830; cp: 65000; name: 'x-unicode-1-1-utf-7'),
  334. (hash: $084A88C0; cp: 65001; name: 'x-unicode-1-1-utf-8'),
  335. (hash: $086F1F20; cp: 28597; name: 'iso_8859-7:1987'),
  336. (hash: $087A8520; cp: 10081; name: 'x-mac-turkish'),
  337. (hash: $08949ED0; cp: 28598; name: 'csisolatinhebrew'),
  338. (hash: $08BC5DF0; cp: 20106; name: 'x-ia5-german'),
  339. (hash: $08C87260; cp: 1201; name: 'unicodefffe'),
  340. (hash: $0904A3D0; cp: 1201; name: 'utf-16be'),
  341. (hash: $0904B5D0; cp: 1200; name: 'utf-16le'),
  342. (hash: $090663D0; cp: 12001; name: 'utf-32be'),
  343. (hash: $09289660; cp: 949; name: 'ksc_5601'),
  344. (hash: $0928CA20; cp: 949; name: 'ks_c_5601'),
  345. (hash: $093E7850; cp: 437; name: 'cspc8codepage437'),
  346. (hash: $096F1FD0; cp: 28598; name: 'iso_8859-8:1988'),
  347. (hash: $09797210; cp: 20127; name: 'iso646-us'),
  348. (hash: $0A0AB120; cp: 20924; name: 'ebcdic-latin9--euro'),
  349. (hash: $0A4C6530; cp: 20107; name: 'x-ia5-swedish'),
  350. (hash: $0A6F1FD0; cp: 28595; name: 'iso_8859-5:1988'),
  351. (hash: $0A86A6F0; cp: 28597; name: 'csisolatingreek'),
  352. (hash: $0A9614F0; cp: 51936; name: 'x-euc-cn'),
  353. (hash: $0A961C10; cp: 51932; name: 'x-euc-jp'),
  354. (hash: $0A9A3850; cp: 65000; name: 'unicode-2-0-utf-7'),
  355. (hash: $0A9A38A0; cp: 65001; name: 'unicode-2-0-utf-8'),
  356. (hash: $0A9A8860; cp: 65000; name: 'unicode-1-1-utf-7'),
  357. (hash: $0A9A8890; cp: 65001; name: 'unicode-1-1-utf-8'),
  358. (hash: $0AA74700; cp: 29001; name: 'x-europa'),
  359. (hash: $0AC5C930; cp: 870; name: 'ebcdic-cp-roece'),
  360. (hash: $0B16D970; cp: 950; name: 'x-x-big5'),
  361. (hash: $0B43A3B0; cp: 949; name: 'csksc56011987'),
  362. (hash: $0B46F040; cp: 51932; name: 'extended_unix_code_packed_format_for_japanese'),
  363. (hash: $0B556150; cp: 936; name: 'csgb2312'),
  364. (hash: $0B59AD90; cp: 51932; name: 'cseucpkdfmtjapanese'),
  365. (hash: $0B6F1F20; cp: 28596; name: 'iso_8859-6:1987'),
  366. (hash: $0B71A2E0; cp: 932; name: 'shift-jis'),
  367. (hash: $0B98E7D0; cp: 20107; name: 'swedish'),
  368. (hash: $0B9B8190; cp: 20108; name: 'norwegian'),
  369. (hash: $0BA3A2E0; cp: 932; name: 'shift_jis'),
  370. (hash: $0BB8F800; cp: 28592; name: 'iso8859-2'),
  371. (hash: $0BB8F830; cp: 28591; name: 'iso8859-1'),
  372. (hash: $0BBD4210; cp: 28591; name: 'iso-8859-1'),
  373. (hash: $0BBD4220; cp: 28592; name: 'iso-8859-2'),
  374. (hash: $0BBD4230; cp: 28593; name: 'iso-8859-3'),
  375. (hash: $0BBD4240; cp: 28594; name: 'iso-8859-4'),
  376. (hash: $0BBD4250; cp: 28595; name: 'iso-8859-5'),
  377. (hash: $0BBD4260; cp: 28596; name: 'iso-8859-6'),
  378. (hash: $0BBD4270; cp: 28597; name: 'iso-8859-7'),
  379. (hash: $0BBD4280; cp: 28598; name: 'iso-8859-8'),
  380. (hash: $0BBD4290; cp: 28599; name: 'iso-8859-9'),
  381. (hash: $0BBD4500; cp: 28592; name: 'iso_8859-2'),
  382. (hash: $0BBD4510; cp: 28593; name: 'iso_8859-3'),
  383. (hash: $0BBD4530; cp: 28591; name: 'iso_8859-1'),
  384. (hash: $0BBD4540; cp: 28596; name: 'iso_8859-6'),
  385. (hash: $0BBD4550; cp: 28597; name: 'iso_8859-7'),
  386. (hash: $0BBD4560; cp: 28594; name: 'iso_8859-4'),
  387. (hash: $0BBD4570; cp: 28595; name: 'iso_8859-5'),
  388. (hash: $0BBD45A0; cp: 28598; name: 'iso_8859-8'),
  389. (hash: $0BBD45B0; cp: 28599; name: 'iso_8859-9'),
  390. (hash: $0BD42480; cp: 28603; name: 'iso-8859-13'),
  391. (hash: $0BD424A0; cp: 874; name: 'iso-8859-11'),
  392. (hash: $0BD424B0; cp: 28600; name: 'iso-8859-10'),
  393. (hash: $0BD424D0; cp: 28606; name: 'iso-8859-16'),
  394. (hash: $0BD424E0; cp: 28605; name: 'iso-8859-15'),
  395. (hash: $0BD424F0; cp: 28604; name: 'iso-8859-14'),
  396. (hash: $0BD456E0; cp: 28605; name: 'iso_8859-15'),
  397. (hash: $0C112E30; cp: 1142; name: 'ebcdic-dk-277+euro'),
  398. (hash: $0C2E2E50; cp: 1147; name: 'ebcdic-fr-297+euro'),
  399. (hash: $0C2E4CE0; cp: 932; name: 'windows-31j'),
  400. (hash: $0C2E9300; cp: 874; name: 'windows-874'),
  401. (hash: $0CE2A710; cp: 936; name: 'chinese'),
  402. (hash: $0CEB2E30; cp: 1143; name: 'ebcdic-se-278+euro'),
  403. (hash: $0D402370; cp: 50225; name: 'iso-2022-kr-7'),
  404. (hash: $0D402380; cp: 51949; name: 'iso-2022-kr-8'),
  405. (hash: $0D42BA20; cp: 38598; name: 'iso-8859-8-i'),
  406. (hash: $0D4CC7B0; cp: 936; name: 'csiso58gb231280'),
  407. (hash: $0D67C3F0; cp: 10003; name: 'x-mac-korean'),
  408. (hash: $0D703300; cp: 37; name: 'csibm037'),
  409. (hash: $0D705900; cp: 20297; name: 'csibm297'),
  410. (hash: $0D705970; cp: 20290; name: 'csibm290'),
  411. (hash: $0D705E20; cp: 20285; name: 'csibm285'),
  412. (hash: $0D705E30; cp: 20284; name: 'csibm284'),
  413. (hash: $0D705E70; cp: 20280; name: 'csibm280'),
  414. (hash: $0D705F00; cp: 20277; name: 'csibm277'),
  415. (hash: $0D705F40; cp: 20273; name: 'csibm273'),
  416. (hash: $0D705FF0; cp: 20278; name: 'csibm278'),
  417. (hash: $0D707030; cp: 20424; name: 'csibm424'),
  418. (hash: $0D707040; cp: 20423; name: 'csibm423'),
  419. (hash: $0D707070; cp: 20420; name: 'csibm420'),
  420. (hash: $0D708670; cp: 500; name: 'csibm500'),
  421. (hash: $0D70BE70; cp: 20880; name: 'csibm880'),
  422. (hash: $0D70BF60; cp: 20871; name: 'csibm871'),
  423. (hash: $0D70BF70; cp: 870; name: 'csibm870'),
  424. (hash: $0D70C620; cp: 20905; name: 'csibm905'),
  425. (hash: $0DBD69F0; cp: 932; name: 'csshiftjis'),
  426. (hash: $0E1753A0; cp: 20880; name: 'ebcdic-cyrillic'),
  427. (hash: $0E3902F0; cp: 10000; name: 'macintosh'),
  428. (hash: $0E55C100; cp: 28592; name: 'iso-ir-101'),
  429. (hash: $0E55C110; cp: 28591; name: 'iso-ir-100'),
  430. (hash: $0E55C180; cp: 28593; name: 'iso-ir-109'),
  431. (hash: $0E55C490; cp: 28598; name: 'iso-ir-138'),
  432. (hash: $0E55C550; cp: 28595; name: 'iso-ir-144'),
  433. (hash: $0E55C580; cp: 949; name: 'iso-ir-149'),
  434. (hash: $0E55C590; cp: 28599; name: 'iso-ir-148'),
  435. (hash: $0E55C610; cp: 28594; name: 'iso-ir-110'),
  436. (hash: $0E55C760; cp: 28596; name: 'iso-ir-127'),
  437. (hash: $0E55C770; cp: 28597; name: 'iso-ir-126'),
  438. (hash: $0E609540; cp: 874; name: 'tis-620'),
  439. (hash: $0E69B340; cp: 20420; name: 'ebcdic-cp-ar1'),
  440. (hash: $0E6F1FC0; cp: 28599; name: 'iso_8859-9:1989'),
  441. (hash: $0F19F040; cp: 20108; name: 'x-ia5-norwegian'),
  442. (hash: $0F372E30; cp: 1143; name: 'ebcdic-fi-278+euro'),
  443. (hash: $0F969E40; cp: 1140; name: 'ebcdic-us-37+euro'),
  444. (hash: $0FAD2E30; cp: 1142; name: 'ebcdic-no-277+euro'),
  445. (hash: $0FB63C60; cp: 10005; name: 'x-mac-hebrew')
  446. );
  447. type
  448. TCodePageEntry = record
  449. cp: TSystemCodePage;
  450. name: PAnsiChar;
  451. end;
  452. const
  453. { this array contains only one name for one codepage.
  454. it is stored in codepage order and is used to search
  455. a codepage name by codepage number }
  456. CodePageNames: array[0..155] of TCodePageEntry = (
  457. (cp: 37; name: 'ibm037'),
  458. (cp: 437; name: 'ibm437'),
  459. (cp: 500; name: 'IBM500'),
  460. (cp: 708; name: 'asmo-708'),
  461. (cp: 720; name: 'DOS-720'),
  462. (cp: 737; name: 'ibm737'),
  463. (cp: 775; name: 'ibm775'),
  464. (cp: 850; name: 'ibm850'),
  465. (cp: 852; name: 'ibm852'),
  466. (cp: 855; name: 'IBM855'),
  467. (cp: 856; name: 'cp856'),
  468. (cp: 857; name: 'ibm857'),
  469. (cp: 858; name: 'ibm00858'),
  470. (cp: 860; name: 'IBM860'),
  471. (cp: 861; name: 'ibm861'),
  472. (cp: 862; name: 'DOS-862'),
  473. (cp: 863; name: 'IBM863'),
  474. (cp: 864; name: 'IBM864'),
  475. (cp: 865; name: 'IBM865'),
  476. (cp: 866; name: 'cp866'),
  477. (cp: 869; name: 'ibm869'),
  478. (cp: 870; name: 'IBM870'),
  479. (cp: 874; name: 'windows-874'),
  480. (cp: 875; name: 'cp875'),
  481. (cp: 932; name: 'shift_jis'),
  482. (cp: 936; name: 'gb2312'),
  483. (cp: 949; name: 'ks_c_5601-1987'),
  484. (cp: 950; name: 'big5'),
  485. (cp: 1026; name: 'ibm1026'),
  486. (cp: 1047; name: 'ibm01047'),
  487. (cp: 1140; name: 'ibm01140'),
  488. (cp: 1141; name: 'IBM01141'),
  489. (cp: 1142; name: 'IBM01142'),
  490. (cp: 1143; name: 'IBM01143'),
  491. (cp: 1144; name: 'IBM01144'),
  492. (cp: 1145; name: 'ibm01145'),
  493. (cp: 1146; name: 'ibm01146'),
  494. (cp: 1147; name: 'ibm01147'),
  495. (cp: 1148; name: 'IBM01148'),
  496. (cp: 1149; name: 'IBM01149'),
  497. (cp: 1200; name: 'utf-16'),
  498. (cp: 1201; name: 'unicodefffe'),
  499. (cp: 1250; name: 'windows-1250'),
  500. (cp: 1251; name: 'windows-1251'),
  501. (cp: 1252; name: 'windows-1252'),
  502. (cp: 1253; name: 'windows-1253'),
  503. (cp: 1254; name: 'windows-1254'),
  504. (cp: 1255; name: 'windows-1255'),
  505. (cp: 1256; name: 'windows-1256'),
  506. (cp: 1257; name: 'windows-1257'),
  507. (cp: 1258; name: 'windows-1258'),
  508. (cp: 1361; name: 'Johab'),
  509. (cp: 3021; name: 'MIK'),
  510. (cp: 10000; name: 'macintosh'),
  511. (cp: 10001; name: 'x-mac-japanese'),
  512. (cp: 10002; name: 'x-mac-chinesetrad'),
  513. (cp: 10003; name: 'x-mac-korean'),
  514. (cp: 10004; name: 'x-mac-arabic'),
  515. (cp: 10005; name: 'x-mac-hebrew'),
  516. (cp: 10006; name: 'x-mac-greek'),
  517. (cp: 10007; name: 'x-mac-cyrillic'),
  518. (cp: 10008; name: 'x-mac-chinesesimp'),
  519. (cp: 10010; name: 'x-mac-romanian'),
  520. (cp: 10017; name: 'x-mac-ukrainian'),
  521. (cp: 10021; name: 'x-mac-thai'),
  522. (cp: 10029; name: 'x-mac-ce'),
  523. (cp: 10079; name: 'x-mac-icelandic'),
  524. (cp: 10081; name: 'x-mac-turkish'),
  525. (cp: 10082; name: 'x-mac-croatian'),
  526. (cp: 12000; name: 'utf-32'),
  527. (cp: 12001; name: 'utf-32BE'),
  528. (cp: 20000; name: 'x-Chinese_CNS'),
  529. (cp: 20000; name: 'x-chinese-cns'),
  530. (cp: 20001; name: 'x-cp20001'),
  531. (cp: 20002; name: 'x_Chinese-Eten'),
  532. (cp: 20002; name: 'x-chinese-eten'),
  533. (cp: 20003; name: 'x-cp20003'),
  534. (cp: 20004; name: 'x-cp20004'),
  535. (cp: 20005; name: 'x-cp20005'),
  536. (cp: 20105; name: 'x-IA5'),
  537. (cp: 20106; name: 'x-ia5-german'),
  538. (cp: 20107; name: 'x-IA5-Swedish'),
  539. (cp: 20108; name: 'x-IA5-Norwegian'),
  540. (cp: 20127; name: 'us-ascii'),
  541. (cp: 20261; name: 'x-cp20261'),
  542. (cp: 20269; name: 'x-cp20269'),
  543. (cp: 20273; name: 'ibm273'),
  544. (cp: 20277; name: 'ibm277'),
  545. (cp: 20278; name: 'ibm278'),
  546. (cp: 20280; name: 'ibm280'),
  547. (cp: 20284; name: 'ibm284'),
  548. (cp: 20285; name: 'IBM285'),
  549. (cp: 20290; name: 'IBM290'),
  550. (cp: 20297; name: 'IBM297'),
  551. (cp: 20420; name: 'ibm420'),
  552. (cp: 20423; name: 'ibm423'),
  553. (cp: 20424; name: 'IBM424'),
  554. (cp: 20833; name: 'x-EBCDIC-KoreanExtended'),
  555. (cp: 20838; name: 'ibm-thai'),
  556. (cp: 20866; name: 'koi8-r'),
  557. (cp: 20871; name: 'ibm871'),
  558. (cp: 20880; name: 'ibm880'),
  559. (cp: 20905; name: 'ibm905'),
  560. (cp: 20924; name: 'IBM00924'),
  561. (cp: 20932; name: 'EUC-JP'),
  562. (cp: 20936; name: 'x-cp20936'),
  563. (cp: 20949; name: 'x-cp20949'),
  564. (cp: 21025; name: 'cp1025'),
  565. (cp: 21027; name: 'x-cp21027'),
  566. (cp: 21866; name: 'koi8-u'),
  567. (cp: 28591; name: 'iso-8859-1'),
  568. (cp: 28592; name: 'iso-8859-2'),
  569. (cp: 28593; name: 'iso-8859-3'),
  570. (cp: 28594; name: 'iso-8859-4'),
  571. (cp: 28595; name: 'iso-8859-5'),
  572. (cp: 28596; name: 'iso-8859-6'),
  573. (cp: 28597; name: 'iso-8859-7'),
  574. (cp: 28598; name: 'iso-8859-8'),
  575. (cp: 28599; name: 'iso-8859-9'),
  576. (cp: 28600; name: 'iso-8859-10'),
  577. (cp: 28601; name: 'iso-8859-11'),
  578. (cp: 28603; name: 'iso-8859-13'),
  579. (cp: 28604; name: 'iso-8859-14'),
  580. (cp: 28605; name: 'iso-8859-15'),
  581. (cp: 28606; name: 'iso-8859-16'),
  582. (cp: 29001; name: 'x-Europa'),
  583. (cp: 38598; name: 'iso-8859-8-i'),
  584. (cp: 50220; name: 'iso-2022-jp'),
  585. (cp: 50221; name: 'csISO2022JP'),
  586. (cp: 50222; name: 'iso-2022-jp'),
  587. (cp: 50225; name: 'iso-2022-kr'),
  588. (cp: 50227; name: 'x-cp50227'),
  589. (cp: 50229; name: 'x-cp50229'),
  590. (cp: 50930; name: 'cp930'),
  591. (cp: 50931; name: 'x-ebcdic-japaneseanduscanada'),
  592. (cp: 50933; name: 'cp933'),
  593. (cp: 50935; name: 'cp935'),
  594. (cp: 50937; name: 'cp937'),
  595. (cp: 50939; name: 'cp939'),
  596. (cp: 51932; name: 'euc-jp'),
  597. (cp: 51936; name: 'euc-cn'),
  598. (cp: 51949; name: 'euc-kr'),
  599. (cp: 52936; name: 'hz-gb-2312'),
  600. (cp: 54936; name: 'gb18030'),
  601. (cp: 57002; name: 'x-iscii-de'),
  602. (cp: 57003; name: 'x-iscii-be'),
  603. (cp: 57004; name: 'x-iscii-ta'),
  604. (cp: 57005; name: 'x-iscii-te'),
  605. (cp: 57006; name: 'x-iscii-as'),
  606. (cp: 57007; name: 'x-iscii-or'),
  607. (cp: 57008; name: 'x-iscii-ka'),
  608. (cp: 57009; name: 'x-iscii-ma'),
  609. (cp: 57010; name: 'x-iscii-gu'),
  610. (cp: 57011; name: 'x-iscii-pa'),
  611. (cp: 65000; name: 'utf-7'),
  612. (cp: 65001; name: 'utf-8')
  613. );
  614. function CodePageToCodePageName(cp: TSystemCodePage): AnsiString;
  615. var
  616. FoundCp: TSystemCodePage;
  617. L, H, I: Integer;
  618. begin
  619. L := Low(CodePageNames);
  620. H := High(CodePageNames);
  621. while L <= H do
  622. begin
  623. I := (L + H) shr 1;
  624. FoundCp := CodePageNames[I].cp;
  625. if FoundCp = cp then
  626. begin
  627. Exit(CodePageNames[I].name);
  628. Break;
  629. end;
  630. if cp > FoundCp then
  631. L := I + 1
  632. else
  633. H := I - 1;
  634. end;
  635. Result := '';
  636. end;
  637. function CodePageNameToCodePage(const cpname: AnsiString): TSystemCodePage;
  638. var
  639. SearchName: AnsiString;
  640. SearchHash, FoundHash: LongWord;
  641. L, H, I: Integer;
  642. begin
  643. SearchName := LowerCase(cpname);
  644. SearchHash := HashName(PAnsiChar(SearchName));
  645. L := Low(CodePageHashes);
  646. H := High(CodePageHashes);
  647. while L <= H do
  648. begin
  649. I := (L + H) shr 1;
  650. FoundHash := CodePageHashes[I].hash;
  651. if FoundHash = SearchHash then
  652. begin
  653. // search down since hashes can repeat in table
  654. while (I > Low(CodePageHashes)) and (CodePageHashes[Pred(I)].hash = FoundHash) do
  655. Dec(I);
  656. while (I <= High(CodePageHashes)) and (CodePageHashes[I].hash = FoundHash) do
  657. begin
  658. if SearchName = CodePageHashes[I].name then
  659. Exit(CodePageHashes[I].cp);
  660. Inc(I);
  661. end;
  662. Break;
  663. end;
  664. if SearchHash > FoundHash then
  665. L := I + 1
  666. else
  667. H := I - 1;
  668. end;
  669. Result := $FFFF;
  670. end;