winiconv.inc 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664
  1. { source: http://win-iconv.googlecode.com/svn-history/r6/trunk/win_iconv.c
  2. public domain
  3. }
  4. type
  5. twin2iconv = record
  6. cp: word;
  7. name: rawbytestring; { for null-termination }
  8. end;
  9. (*
  10. * Code Page Identifiers
  11. * http://msdn2.microsoft.com/en-us/library/ms776446.aspx
  12. *)
  13. const
  14. win2iconv_arr: array[-1..406{$ifndef aix}-83{$endif}] of twin2iconv =
  15. ((cp:0; name: 'UTF-8'), { invalid/unknown -> utf-8 }
  16. (cp:37; name:'IBM037'), (* IBM EBCDIC US-Canada *)
  17. (cp:37; name:'IBM-037'), (* IBM EBCDIC US-Canada, AIX *)
  18. (cp:154; name:'CP154'),
  19. (cp:154; name:'CYRILLIC-ASIAN'),
  20. (cp:154; name:'PT154'),
  21. (cp:154; name:'PTCP154'),
  22. (cp:154; name:'CSPTCP154'),
  23. (cp:437; name:'437'),
  24. (cp:437; name:'CP437'),
  25. (cp:437; name:'IBM-437'),
  26. (cp:437; name:'CSPC8CODEPAGE437'),
  27. (cp:437; name:'IBM437'), (* OEM United States *)
  28. (cp:500; name:'IBM500'), (* IBM EBCDIC International *)
  29. (cp:500; name:'IBM-500'), (* IBM EBCDIC International, AIX *)
  30. (cp:708; name:'ASMO-708'), (* Arabic (ASMO 708) *)
  31. (cp:720; name:'DOS-720'), (* Arabic (Transparent ASMO); Arabic (DOS) *)
  32. (cp:737; name:'CP737'),
  33. (cp:737; name:'ibm737'), (* OEM Greek (formerly 437G); Greek (DOS) *)
  34. (cp:775; name:'CP775'),
  35. (cp:775; name:'IBM775'),
  36. (cp:775; name:'CSPC775BALTIC'),
  37. (cp:775; name:'ibm775'), (* OEM Baltic; Baltic (DOS) *)
  38. (cp:850; name:'850'),
  39. {$ifdef aix}
  40. (cp:850; name:'IBM-850'), (* AIX *)
  41. {$endif}
  42. (cp:850; name:'CP850'),
  43. (cp:850; name:'IBM850'),
  44. (cp:850; name:'CSPC850MULTILINGUAL'),
  45. (cp:850; name:'ibm850'), (* OEM Multilingual Latin 1; Western European (DOS) *)
  46. (cp:852; name:'852'),
  47. {$ifdef aix}
  48. (cp:852; name:'IBM-852'), (* AIX *)
  49. {$endif}
  50. (cp:852; name:'CP852'),
  51. (cp:852; name:'IBM852'),
  52. (cp:852; name:'CSPCP852'),
  53. (cp:852; name:'ibm852'), (* OEM Latin 2; Central European (DOS) *)
  54. (cp:853; name:'CP853'),
  55. (cp:855; name:'855'),
  56. {$ifdef aix}
  57. (cp:855; name:'IBM-855'), (* AIX *)
  58. {$endif}
  59. (cp:855; name:'CP855'),
  60. (cp:855; name:'IBM855'),
  61. (cp:855; name:'CSIBM855'),
  62. (cp:855; name:'IBM855'), (* OEM Cyrillic (primarily Russian) *)
  63. (cp:857; name:'857'),
  64. {$ifdef aix}
  65. (cp:857; name:'IBM-857'), (* AIX *)
  66. {$endif}
  67. (cp:857; name:'CP857'),
  68. (cp:857; name:'IBM857'),
  69. (cp:857; name:'CSIBM857'),
  70. (cp:857; name:'ibm857'), (* OEM Turkish; Turkish (DOS) *)
  71. (cp:858; name:'CP858'),
  72. (cp:858; name:'IBM00858'), (* OEM Multilingual Latin 1 + Euro symbol *)
  73. (cp:860; name:'860'),
  74. {$ifdef aix}
  75. (cp:860; name:'IBM-860'), (* AIX *)
  76. {$endif}
  77. (cp:860; name:'CP860'),
  78. (cp:860; name:'IBM860'),
  79. (cp:860; name:'CSIBM860'),
  80. (cp:860; name:'IBM860'), (* OEM Portuguese; Portuguese (DOS) *)
  81. (cp:861; name:'861'),
  82. {$ifdef aix}
  83. (cp:861; name:'IBM-861'), (* AIX *)
  84. {$endif}
  85. (cp:861; name:'CP-IS'),
  86. (cp:861; name:'CP861'),
  87. (cp:861; name:'IBM861'),
  88. (cp:861; name:'CSIBM861'),
  89. (cp:861; name:'ibm861'), (* OEM Icelandic; Icelandic (DOS) *)
  90. (cp:862; name:'862'),
  91. {$ifdef aix}
  92. (cp:862; name:'IBM-862'), (* AIX *)
  93. {$endif}
  94. (cp:862; name:'CP862'),
  95. (cp:862; name:'IBM862'),
  96. (cp:862; name:'CSPC862LATINHEBREW'),
  97. (cp:862; name:'DOS-862'), (* OEM Hebrew; Hebrew (DOS) *)
  98. (cp:863; name:'863'),
  99. (cp:863; name:'CP863'),
  100. {$ifdef aix}
  101. (cp:863; name:'IBM-863'), (* AIX *)
  102. {$endif}
  103. (cp:863; name:'CSIBM863'),
  104. (cp:863; name:'IBM863'), (* OEM French Canadian; French Canadian (DOS) *)
  105. (cp:864; name:'CP864'),
  106. {$ifdef aix}
  107. (cp:864; name:'IBM-864'), (* AIX *)
  108. {$endif}
  109. (cp:864; name:'CSIBM864'),
  110. (cp:864; name:'IBM864'), (* OEM Arabic; Arabic (864) *)
  111. (cp:865; name:'865'),
  112. (cp:865; name:'IBM-865'), (*AIX *)
  113. (cp:865; name:'CP865'),
  114. (cp:865; name:'CSIBM865'),
  115. (cp:865; name:'IBM865'), (* OEM Nordic; Nordic (DOS) *)
  116. (cp:866; name:'866'),
  117. {$ifdef aix}
  118. (cp:866; name:'IBM-866'), (* AIX *)
  119. {$endif}
  120. (cp:866; name:'CP866'),
  121. (cp:866; name:'IBM866'),
  122. (cp:866; name:'CSIBM866'),
  123. (cp:866; name:'cp866'), (* OEM Russian; Cyrillic (DOS) *)
  124. (cp:869; name:'869'),
  125. (cp:869; name:'IBM-869'),
  126. (cp:869; name:'CP-GR'),
  127. (cp:869; name:'CP869'),
  128. (cp:869; name:'IBM869'),
  129. (cp:869; name:'CSIBM869'),
  130. (cp:869; name:'ibm869'), (* OEM Modern Greek; Greek, Modern (DOS) *)
  131. (cp:870; name:'IBM870'), (* IBM EBCDIC Multilingual/ROECE (Latin 2); IBM EBCDIC Multilingual Latin 2 *)
  132. {$ifdef aix}
  133. (cp:870; name:'IBM-870'), (* AIX *)
  134. {$endif}
  135. (cp:874; name:'CP874'),
  136. (cp:874; name:'WINDOWS-874'),
  137. (cp:874; name:'windows-874'), (* ANSI/OEM Thai (same as 28605, ISO 8859-15); Thai (Windows) *)
  138. (cp:875; name:'cp875'), (* IBM EBCDIC Greek Modern *)
  139. (cp:932; name:'CP932'),
  140. (cp:932; name:'IBM-943'), (* AIX -- note: IBM-943 = MS 932; IBM-932 is something different*)
  141. (cp:932; name:'MS932'),
  142. (cp:932; name:'SHIFFT_JIS'),
  143. (cp:932; name:'SHIFFT_JIS-MS'),
  144. (cp:932; name:'SJIS'),
  145. (cp:932; name:'SJIS-MS'),
  146. (cp:932; name:'SJIS-OPEN'),
  147. (cp:932; name:'SJIS-WIN'),
  148. (cp:932; name:'WINDOWS-31J'),
  149. (cp:932; name:'WINDOWS-932'),
  150. (cp:932; name:'CSWINDOWS31J'),
  151. (cp:932; name:'shift_jis'), (* ANSI/OEM Japanese; Japanese (Shift-JIS) *)
  152. (cp:932; name:'shift-jis'), (* alternative name for it *)
  153. (cp:936; name:'CP936'),
  154. {$ifdef aix}
  155. (cp:936; name:'IBM-eucCN'), (* AIX *)
  156. {$endif}
  157. (cp:936; name:'GBK'),
  158. (cp:936; name:'MS936'),
  159. (cp:936; name:'WINDOWS-936'),
  160. (cp:936; name:'gb2312'), (* ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312) *)
  161. (cp:949; name:'CP949'),
  162. {$ifdef aix}
  163. (cp:949; name:'IBM-eucKR'), (* AIX *)
  164. {$endif}
  165. (cp:949; name:'UHC'),
  166. (cp:949; name:'EUC-KR'),
  167. (cp:949; name:'ks_c_5601-1987'), (* ANSI/OEM Korean (Unified Hangul Code) *)
  168. (cp:950; name:'CP950'),
  169. (cp:950; name:'BIG5'),
  170. (cp:950; name:'big5'), (* ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC); Chinese Traditional (Big5) *)
  171. (cp:1026; name:'IBM1026'), (* IBM EBCDIC Turkish (Latin 5) *)
  172. {$ifdef aix}
  173. (cp:1026; name:'IBM-1026'), (* AIX *)
  174. {$endif}
  175. (cp:1047; name:'IBM01047'), (* IBM EBCDIC Latin 1/Open System *)
  176. {$ifdef aix}
  177. (cp:1047; name:'IBM-1047'), (* AIX *)
  178. {$endif}
  179. (cp:1125; name:'CP1125'),
  180. (cp:1125; name:'IBM-1125'),
  181. (cp:1133; name:'CP1133'),
  182. (cp:1133; name:'IBM-1133'),
  183. (cp:1133; name:'IBM-CP1133'),
  184. (cp:1140; name:'IBM01140'), (* IBM EBCDIC US-Canada (037 + Euro symbol); IBM EBCDIC (US-Canada-Euro) *)
  185. {$ifdef aix}
  186. (cp:1140; name:'IBM-1140'), (* AIX *)
  187. {$endif}
  188. (cp:1141; name:'IBM01141'), (* IBM EBCDIC Germany (20273 + Euro symbol); IBM EBCDIC (Germany-Euro) *)
  189. {$ifdef aix}
  190. (cp:1141; name:'IBM-1141'), (* AIX *)
  191. {$endif}
  192. (cp:1142; name:'IBM01142'), (* IBM EBCDIC Denmark-Norway (20277 + Euro symbol); IBM EBCDIC (Denmark-Norway-Euro) *)
  193. {$ifdef aix}
  194. (cp:1142; name:'IBM-1142'), (* AIX *)
  195. {$endif}
  196. (cp:1143; name:'IBM01143'), (* IBM EBCDIC Finland-Sweden (20278 + Euro symbol); IBM EBCDIC (Finland-Sweden-Euro) *)
  197. {$ifdef aix}
  198. (cp:1143; name:'IBM-1143'), (* AIX *)
  199. {$endif}
  200. (cp:1144; name:'IBM01144'), (* IBM EBCDIC Italy (20280 + Euro symbol); IBM EBCDIC (Italy-Euro) *)
  201. {$ifdef aix}
  202. (cp:1144; name:'IBM-1144'), (* AIX *)
  203. {$endif}
  204. (cp:1145; name:'IBM01145'), (* IBM EBCDIC Latin America-Spain (20284 + Euro symbol); IBM EBCDIC (Spain-Euro) *)
  205. {$ifdef aix}
  206. (cp:1145; name:'IBM-1145'), (* AIX *)
  207. {$endif}
  208. (cp:1146; name:'IBM01146'), (* IBM EBCDIC United Kingdom (20285 + Euro symbol); IBM EBCDIC (UK-Euro) *)
  209. {$ifdef aix}
  210. (cp:1146; name:'IBM-1146'), (* AIX *)
  211. {$endif}
  212. (cp:1147; name:'IBM01147'), (* IBM EBCDIC France (20297 + Euro symbol); IBM EBCDIC (France-Euro) *)
  213. {$ifdef aix}
  214. (cp:1147; name:'IBM-1147'), (* AIX *)
  215. {$endif}
  216. (cp:1148; name:'IBM01148'), (* IBM EBCDIC International (500 + Euro symbol); IBM EBCDIC (International-Euro) *)
  217. {$ifdef aix}
  218. (cp:1148; name:'IBM-1148'), (* AIX *)
  219. {$endif}
  220. (cp:1149; name:'IBM01149'), (* IBM EBCDIC Icelandic (20871 + Euro symbol); IBM EBCDIC (Icelandic-Euro) *)
  221. {$ifdef aix}
  222. (cp:1149; name:'IBM-1149'), (* AIX *)
  223. {$endif}
  224. (cp:1200; name:'UTF-16LE'),
  225. {$ifdef aix}
  226. (cp:1200; name:'UTF-16le'), (* AIX *)
  227. {$endif}
  228. (cp:1200; name:'UTF16LE'),
  229. (cp:1200; name:'UCS-2LE'),
  230. (cp:1200; name:'CP1200'),
  231. {$ifdef FPC_LITTLE_ENDIAN}
  232. (* Default is little endian, because the platform is *)
  233. (cp:1200; name:'UTF16'),
  234. (cp:1200; name:'UTF-16'),
  235. (cp:1200; name:'UCS-2'),
  236. {$endif}
  237. (cp:1201; name:'UTF-16BE'),
  238. (cp:1201; name:'UTF16BE'),
  239. (cp:1201; name:'UCS-2BE'),
  240. (cp:1201; name:'unicodeFFFE'),
  241. (cp:1201; name:'CP1201'),
  242. {$ifdef FPC_BIG_ENDIAN}
  243. (*
  244. * Default is big endian.
  245. * See rfc2781 4.3 Interpreting text labelled as UTF-16.
  246. *)
  247. (cp:1201; name:'UTF16'),
  248. (cp:1201; name:'UTF-16'),
  249. (cp:1201; name:'UCS-2'),
  250. {$endif}
  251. (cp:1250; name:'CP1250'),
  252. (cp:1250; name:'MS-EE'),
  253. (cp:1250; name:'WINDOWS-1250'),
  254. (cp:1250; name:'windows-1250'), (* ANSI Central European; Central European (Windows) *)
  255. (cp:1251; name:'CP1251'),
  256. (cp:1251; name:'MS-CYRL'),
  257. (cp:1251; name:'WINDOWS-1251'),
  258. (cp:1251; name:'windows-1251'), (* ANSI Cyrillic; Cyrillic (Windows) *)
  259. (cp:1252; name:'CP819'),
  260. (cp:1252; name:'IBM819'),
  261. (cp:1252; name:'CP1252'),
  262. (cp:1252; name:'MS-ANSI'),
  263. (cp:1252; name:'WINDOWS-1252'),
  264. (cp:1252; name:'windows-1252'), (* ANSI Latin 1; Western European (Windows) *)
  265. (cp:1253; name:'CP1253'),
  266. (cp:1253; name:'MS-GREEK'),
  267. (cp:1253; name:'WINDOWS-1253'),
  268. (cp:1253; name:'windows-1253'), (* ANSI Greek; Greek (Windows) *)
  269. (cp:1254; name:'CP1254'),
  270. (cp:1254; name:'MS-TURK'),
  271. (cp:1254; name:'WINDOWS-1254'),
  272. (cp:1254; name:'windows-1254'), (* ANSI Turkish; Turkish (Windows) *)
  273. (cp:1255; name:'CP1255'),
  274. (cp:1255; name:'MS-HEBR'),
  275. (cp:1255; name:'WINDOWS-1255'),
  276. (cp:1255; name:'windows-1255'), (* ANSI Hebrew; Hebrew (Windows) *)
  277. (cp:1256; name:'CP1256'),
  278. (cp:1256; name:'MS-ARAB'),
  279. (cp:1256; name:'WINDOWS-1256'),
  280. (cp:1256; name:'windows-1256'), (* ANSI Arabic; Arabic (Windows) *)
  281. (cp:1257; name:'CP1257'),
  282. (cp:1257; name:'WINBALTRIM'),
  283. (cp:1257; name:'WINDOWS-1257'),
  284. (cp:1257; name:'windows-1257'), (* ANSI Baltic; Baltic (Windows) *)
  285. (cp:1258; name:'CP1258'),
  286. (cp:1258; name:'WINDOWS-1258'),
  287. (cp:1258; name:'windows-1258'), (* ANSI/OEM Vietnamese; Vietnamese (Windows) *)
  288. (cp:1361; name:'CP1361'),
  289. (cp:1361; name:'JOHAB'),
  290. (cp:1361; name:'Johab'), (* Korean (Johab) *)
  291. (cp:10000; name:'macintosh'), (* MAC Roman; Western European (Mac) *)
  292. (cp:10001; name:'x-mac-japanese'), (* Japanese (Mac) *)
  293. (cp:10002; name:'x-mac-chinesetrad'), (* MAC Traditional Chinese (Big5); Chinese Traditional (Mac) *)
  294. (cp:10003; name:'x-mac-korean'), (* Korean (Mac) *)
  295. (cp:10004; name:'x-mac-arabic'), (* Arabic (Mac) *)
  296. (cp:10005; name:'x-mac-hebrew'), (* Hebrew (Mac) *)
  297. (cp:10006; name:'x-mac-greek'), (* Greek (Mac) *)
  298. (cp:10007; name:'x-mac-cyrillic'), (* Cyrillic (Mac) *)
  299. (cp:10008; name:'x-mac-chinesesimp'), (* MAC Simplified Chinese (GB 2312); Chinese Simplified (Mac) *)
  300. (cp:10010; name:'x-mac-romanian'), (* Romanian (Mac) *)
  301. (cp:10017; name:'x-mac-ukrainian'), (* Ukrainian (Mac) *)
  302. (cp:10021; name:'x-mac-thai'), (* Thai (Mac) *)
  303. (cp:10029; name:'x-mac-ce'), (* MAC Latin 2; Central European (Mac) *)
  304. (cp:10079; name:'x-mac-icelandic'), (* Icelandic (Mac) *)
  305. (cp:10081; name:'x-mac-turkish'), (* Turkish (Mac) *)
  306. (cp:10082; name:'x-mac-croatian'), (* Croatian (Mac) *)
  307. (cp:12000; name:'UTF-32LE'),
  308. (cp:12000; name:'CP12000'),
  309. (cp:12000; name:'UTF32LE'),
  310. {$ifdef FPC_LITTLE_ENDIAN}
  311. (cp:12000; name:'UTF32'),
  312. (cp:12000; name:'UTF-32'),
  313. {$endif}
  314. (cp:12001; name:'UTF-32BE'),
  315. (cp:12001; name:'CP12001'),
  316. (cp:12001; name:'UTF32BE'),
  317. {$ifdef FPC_BIG_ENDIAN}
  318. (cp:12001; name:'UTF32'),
  319. (cp:12001; name:'UTF-32'),
  320. {$endif}
  321. (cp:20000; name:'x-Chinese_CNS'), (* CNS Taiwan; Chinese Traditional (CNS) *)
  322. (cp:20001; name:'x-cp20001'), (* TCA Taiwan *)
  323. (cp:20002; name:'x_Chinese-Eten'), (* Eten Taiwan; Chinese Traditional (Eten) *)
  324. (cp:20003; name:'x-cp20003'), (* IBM5550 Taiwan *)
  325. (cp:20004; name:'x-cp20004'), (* TeleText Taiwan *)
  326. (cp:20005; name:'x-cp20005'), (* Wang Taiwan *)
  327. (cp:20105; name:'x-IA5'), (* IA5 (IRV International Alphabet No. 5, 7-bit); Western European (IA5) *)
  328. (cp:20106; name:'x-IA5-German'), (* IA5 German (7-bit) *)
  329. (cp:20107; name:'x-IA5-Swedish'), (* IA5 Swedish (7-bit) *)
  330. (cp:20108; name:'x-IA5-Norwegian'), (* IA5 Norwegian (7-bit) *)
  331. (cp:20127; name:'US-ASCII'),
  332. (cp:20127; name:'ASCII'),
  333. {$ifdef aix}
  334. (cp:20127; name:'ASCII-GR'), (* AIX *)
  335. {$endif}
  336. (cp:20127; name:'ANSI_X3.4-1968'),
  337. (cp:20127; name:'ANSI_X3.4-1986'),
  338. (cp:20127; name:'CP367'),
  339. {$ifdef aix}
  340. (cp:20127; name:'IBM-367'), (* AIX *)
  341. {$endif}
  342. (cp:20127; name:'IBM367'),
  343. (cp:20127; name:'ISO-IR-6'),
  344. (cp:20127; name:'ISO646-US'),
  345. (cp:20127; name:'ISO_646.IRV:1991'),
  346. (cp:20127; name:'US'),
  347. (cp:20127; name:'CSASCII'),
  348. (cp:20127; name:'us-ascii'), (* US-ASCII (7-bit) *)
  349. (cp:20261; name:'x-cp20261'), (* T.61 *)
  350. (cp:20269; name:'x-cp20269'), (* ISO 6937 Non-Spacing Accent *)
  351. (cp:20273; name:'IBM273'), (* IBM EBCDIC Germany *)
  352. {$ifdef aix}
  353. (cp:20273; name:'IBM-273'), (* AIX *)
  354. {$endif}
  355. (cp:20277; name:'IBM277'), (* IBM EBCDIC Denmark-Norway *)
  356. {$ifdef aix}
  357. (cp:20277; name:'IBM-277'), (* AIX *)
  358. {$endif}
  359. (cp:20278; name:'IBM278'), (* IBM EBCDIC Finland-Sweden *)
  360. {$ifdef aix}
  361. (cp:20278; name:'IBM-278'), (* AIX *)
  362. {$endif}
  363. (cp:20280; name:'IBM280'), (* IBM EBCDIC Italy *)
  364. {$ifdef aix}
  365. (cp:20280; name:'IBM-280'), (* AIX *)
  366. {$endif}
  367. (cp:20284; name:'IBM284'), (* IBM EBCDIC Latin America-Spain *)
  368. {$ifdef aix}
  369. (cp:20284; name:'IBM-284'), (* AIX *)
  370. {$endif}
  371. (cp:20285; name:'IBM285'), (* IBM EBCDIC United Kingdom *)
  372. {$ifdef aix}
  373. (cp:20285; name:'IBM-285'), (* AIX *)
  374. {$endif}
  375. (cp:20290; name:'IBM290'), (* IBM EBCDIC Japanese Katakana Extended *)
  376. {$ifdef aix}
  377. (cp:20290; name:'IBM-290'), (* AIX *)
  378. {$endif}
  379. (cp:20297; name:'IBM297'), (* IBM EBCDIC France *)
  380. {$ifdef aix}
  381. (cp:20297; name:'IBM-297'), (* AIX *)
  382. {$endif}
  383. (cp:20420; name:'IBM420'), (* IBM EBCDIC Arabic *)
  384. {$ifdef aix}
  385. (cp:20420; name:'IBM-420'), (* AIX *)
  386. {$endif}
  387. (cp:20423; name:'IBM423'), (* IBM EBCDIC Greek *)
  388. {$ifdef aix}
  389. (cp:20423; name:'IBM-423'), (* AIX *)
  390. {$endif}
  391. (cp:20424; name:'IBM424'), (* IBM EBCDIC Hebrew *)
  392. {$ifdef aix}
  393. (cp:20424; name:'IBM-424'), (* AIX *)
  394. {$endif}
  395. (cp:20833; name:'x-EBCDIC-KoreanExtended'), (* IBM EBCDIC Korean Extended *)
  396. (cp:20838; name:'IBM-Thai'), (* IBM EBCDIC Thai *)
  397. {$ifdef aix}
  398. (cp:20838; name:'TIS-620'), (* AIX *)
  399. {$endif}
  400. (cp:20866; name:'koi8-r'), (* Russian (KOI8-R); Cyrillic (KOI8-R) *)
  401. (cp:20871; name:'IBM871'), (* IBM EBCDIC Icelandic *)
  402. {$ifdef aix}
  403. (cp:20871; name:'IBM-871'), (* AIX *)
  404. {$endif}
  405. (cp:20880; name:'IBM880'), (* IBM EBCDIC Cyrillic Russian *)
  406. {$ifdef aix}
  407. (cp:20880; name:'IBM-880'), (* AIX *)
  408. {$endif}
  409. (cp:20905; name:'IBM905'), (* IBM EBCDIC Turkish *)
  410. {$ifdef aix}
  411. (cp:20905; name:'IBM-905'), (* AIX *)
  412. {$endif}
  413. (cp:20924; name:'IBM00924'), (* IBM EBCDIC Latin 1/Open System (1047 + Euro symbol) *)
  414. {$ifdef aix}
  415. (cp:20924; name:'IBM-924'), (* AIX *)
  416. {$endif}
  417. (cp:20932; name:'EUC-JP'), (* Japanese (JIS 0208-1990 and 0121-1990) *)
  418. {$ifdef aix}
  419. (cp:20932; name:'IBM-eucJP'), (* AIX *)
  420. {$endif}
  421. (cp:20936; name:'x-cp20936'), (* Simplified Chinese (GB2312); Chinese Simplified (GB2312-80) *)
  422. {$ifdef aix}
  423. (cp:20936; name:'GB2312.1980-0'), (* AIX *)
  424. {$endif}
  425. {$ifdef aix}
  426. (cp:20936; name:'GB2312.1980-0-GL'), (* AIX *)
  427. {$endif}
  428. {$ifdef aix}
  429. (cp:20936; name:'GB2312.1980-0-GR'), (* AIX *)
  430. {$endif}
  431. (cp:20949; name:'x-cp20949'), (* Korean Wansung *)
  432. (cp:21025; name:'cp1025'), (* IBM EBCDIC Cyrillic Serbian-Bulgarian *)
  433. {$ifdef aix}
  434. (cp:21025; name:'IBM-1025'), (* AIX *)
  435. {$endif}
  436. (cp:21866; name:'koi8-u'), (* Ukrainian (KOI8-U); Cyrillic (KOI8-U) *)
  437. {$ifdef aix}
  438. (cp:21866; name:'IBM-1124'), (* AIX *)
  439. {$endif}
  440. (cp:28591; name:'ISO-8859-1'),
  441. (cp:28591; name:'ISO-IR-100'),
  442. (cp:28591; name:'ISO8859-1'),
  443. (cp:28591; name:'ISO_8859-1'),
  444. (cp:28591; name:'ISO_8859-1:1987'),
  445. (cp:28591; name:'L1'),
  446. (cp:28591; name:'LATIN1'),
  447. (cp:28591; name:'CSISOLATIN1'),
  448. (cp:28591; name:'iso-8859-1'), (* ISO 8859-1 Latin 1; Western European (ISO) *)
  449. {$ifdef aix}
  450. (cp:28591; name:'ISO8859-1'), (* AIX *)
  451. {$endif}
  452. {$ifdef aix}
  453. (cp:28591; name:'ISO8859-1-GL'), (* AIX *)
  454. {$endif}
  455. {$ifdef aix}
  456. (cp:28591; name:'ISO8859-1-GT'), (* AIX *)
  457. {$endif}
  458. (cp:28591; name:'iso8859-1'), (* ISO 8859-1 Latin 1; Western European (ISO) *)
  459. (cp:28592; name:'iso-8859-2'), (* ISO 8859-2 Central European; Central European (ISO) *)
  460. {$ifdef aix}
  461. (cp:28592; name:'ISO8859-2'), (* AIX *)
  462. {$endif}
  463. {$ifdef aix}
  464. (cp:28592; name:'ISO8859-2-GL'), (* AIX *)
  465. {$endif}
  466. {$ifdef aix}
  467. (cp:28593; name:'ISO8859-2-GT'), (* AIX *)
  468. {$endif}
  469. (cp:28592; name:'iso8859-2'), (* ISO 8859-2 Central European; Central European (ISO) *)
  470. (cp:28593; name:'iso-8859-3'), (* ISO 8859-3 Latin 3 *)
  471. {$ifdef aix}
  472. (cp:28593; name:'ISO8859-3'), (* AIX *)
  473. {$endif}
  474. {$ifdef aix}
  475. (cp:28593; name:'ISO8859-3-GL'), (* AIX *)
  476. {$endif}
  477. {$ifdef aix}
  478. (cp:28593; name:'ISO8859-3-GT'), (* AIX *)
  479. {$endif}
  480. (cp:28593; name:'iso8859-3'), (* ISO 8859-3 Latin 3 *)
  481. (cp:28594; name:'iso-8859-4'), (* ISO 8859-4 Baltic *)
  482. {$ifdef aix}
  483. (cp:28594; name:'ISO8859-4'), (* AIX *)
  484. {$endif}
  485. {$ifdef aix}
  486. (cp:28594; name:'ISO8859-4-GL'), (* AIX *)
  487. {$endif}
  488. {$ifdef aix}
  489. (cp:28594; name:'ISO8859-4-GT'), (* AIX *)
  490. {$endif}
  491. (cp:28594; name:'iso8859-4'), (* ISO 8859-4 Baltic *)
  492. (cp:28595; name:'iso-8859-5'), (* ISO 8859-5 Cyrillic *)
  493. {$ifdef aix}
  494. (cp:28595; name:'ISO8859-5'), (* AIX *)
  495. {$endif}
  496. {$ifdef aix}
  497. (cp:28595; name:'ISO8859-5-GL'), (* AIX *)
  498. {$endif}
  499. {$ifdef aix}
  500. (cp:28595; name:'ISO-8859-5-GT'), (* AIX *)
  501. {$endif}
  502. (cp:28595; name:'iso8859-5'), (* ISO 8859-5 Cyrillic *)
  503. (cp:28596; name:'iso-8859-6'), (* ISO 8859-6 Arabic *)
  504. {$ifdef aix}
  505. (cp:28596; name:'ISO8859-6'), (* AIX *)
  506. {$endif}
  507. {$ifdef aix}
  508. (cp:28596; name:'ISO-8859-6-GL'), (* AIX *)
  509. {$endif}
  510. {$ifdef aix}
  511. (cp:28596; name:'ISO-8859-6-GT'), (* AIX *)
  512. {$endif}
  513. (cp:28596; name:'iso8859-6'), (* ISO 8859-6 Arabic *)
  514. (cp:28597; name:'iso-8859-7'), (* ISO 8859-7 Greek *)
  515. {$ifdef aix}
  516. (cp:28597; name:'ISO8859-7'), (* AIX *)
  517. {$endif}
  518. {$ifdef aix}
  519. (cp:28597; name:'ISO-8859-7-GL'), (* AIX *)
  520. {$endif}
  521. {$ifdef aix}
  522. (cp:28597; name:'ISO8859-7-GT'), (* AIX *)
  523. {$endif}
  524. (cp:28597; name:'iso8859-7'), (* ISO 8859-7 Greek *)
  525. (cp:28598; name:'iso-8859-8'), (* ISO 8859-8 Hebrew; Hebrew (ISO-Visual) *)
  526. {$ifdef aix}
  527. (cp:28598; name:'ISO8859-8'), (* AIX *)
  528. {$endif}
  529. {$ifdef aix}
  530. (cp:28598; name:'ISO8859-8-GL'), (* AIX *)
  531. {$endif}
  532. {$ifdef aix}
  533. (cp:28598; name:'ISO8859-8-GT'), (* AIX *)
  534. {$endif}
  535. (cp:28598; name:'iso8859-8'), (* ISO 8859-8 Hebrew; Hebrew (ISO-Visual) *)
  536. (cp:28599; name:'iso-8859-9'), (* ISO 8859-9 Turkish *)
  537. {$ifdef aix}
  538. (cp:28599; name:'ISO8859-9'), (* AIX *)
  539. {$endif}
  540. {$ifdef aix}
  541. (cp:28599; name:'ISO8859-9-GL'), (* AIX *)
  542. {$endif}
  543. {$ifdef aix}
  544. (cp:28599; name:'ISO8859-9-GT'), (* AIX *)
  545. {$endif}
  546. (cp:28599; name:'iso8859-9'), (* ISO 8859-9 Turkish *)
  547. (cp:28603; name:'iso-8859-13'), (* ISO 8859-13 Estonian *)
  548. {$ifdef aix}
  549. (cp:28603; name:'ISO8859-13'), (* AIX *)
  550. {$endif}
  551. {$ifdef aix}
  552. (cp:28603; name:'ISO8859-13-GL'), (* AIX *)
  553. {$endif}
  554. {$ifdef aix}
  555. (cp:28603; name:'ISO8859-13-GT'), (* AIX *)
  556. {$endif}
  557. (cp:28603; name:'iso8859-13'), (* ISO 8859-13 Estonian *)
  558. (cp:28605; name:'iso-8859-15'), (* ISO 8859-15 Latin 9 *)
  559. {$ifdef aix}
  560. (cp:28605; name:'ISO8859-15'), (* AIX *)
  561. {$endif}
  562. {$ifdef aix}
  563. (cp:28605; name:'ISO8859-15-GL'), (* AIX *)
  564. {$endif}
  565. {$ifdef aix}
  566. (cp:28605; name:'ISO8859-15-GT'), (* AIX *)
  567. {$endif}
  568. (cp:28605; name:'iso8859-15'), (* ISO 8859-15 Latin 9 *)
  569. (cp:29001; name:'x-Europa'), (* Europa 3 *)
  570. (cp:38598; name:'iso-8859-8-i'), (* ISO 8859-8 Hebrew; Hebrew (ISO-Logical) *)
  571. (cp:38598; name:'iso8859-8-i'), (* ISO 8859-8 Hebrew; Hebrew (ISO-Logical) *)
  572. (cp:50220; name:'iso-2022-jp'), (* ISO 2022 Japanese with no halfwidth Katakana; Japanese (JIS) *)
  573. (cp:50221; name:'ISO-2022-JP'),
  574. (cp:50221; name:'CP50221'),
  575. (cp:50221; name:'ISO-2022-JP-MS'),
  576. (cp:50221; name:'ISO2022-JP'),
  577. (cp:50221; name:'ISO2022-JP-MS'),
  578. (cp:50221; name:'MS50221'),
  579. (cp:50221; name:'WINDOWS-50221'),
  580. (cp:50221; name:'csISO2022JP'), (* ISO 2022 Japanese with halfwidth Katakana; Japanese (JIS-Allow 1 byte Kana) *)
  581. (cp:50222; name:'iso-2022-jp'), (* ISO 2022 Japanese JIS X 0201-1989; Japanese (JIS-Allow 1 byte Kana - SO/SI) *)
  582. (cp:50225; name:'iso-2022-kr'), (* ISO 2022 Korean *)
  583. (cp:50225; name:'iso2022-kr'), (* ISO 2022 Korean *)
  584. (cp:50227; name:'x-cp50227'), (* ISO 2022 Simplified Chinese; Chinese Simplified (ISO 2022) *)
  585. (cp:51932; name:'EUC-JP'),
  586. (cp:51932; name:'CP51932'),
  587. (cp:51932; name:'MS51932'),
  588. (cp:51932; name:'WINDOWS-51932'),
  589. (cp:51932; name:'euc-jp'), (* EUC Japanese *)
  590. (cp:51936; name:'EUC-CN'), (* EUC Simplified Chinese; Chinese Simplified (EUC) *)
  591. (cp:51949; name:'euc-kr'), (* EUC Korean *)
  592. (cp:52936; name:'hz-gb-2312'), (* HZ-GB2312 Simplified Chinese; Chinese Simplified (HZ) *)
  593. (cp:54936; name:'GB18030'), (* Windows XP and later: GB18030 Simplified Chinese (4 byte); Chinese Simplified (GB18030) *)
  594. (cp:57002; name:'x-iscii-de'), (* ISCII Devanagari *)
  595. (cp:57003; name:'x-iscii-be'), (* ISCII Bengali *)
  596. (cp:57004; name:'x-iscii-ta'), (* ISCII Tamil *)
  597. (cp:57005; name:'x-iscii-te'), (* ISCII Telugu *)
  598. (cp:57006; name:'x-iscii-as'), (* ISCII Assamese *)
  599. (cp:57007; name:'x-iscii-or'), (* ISCII Oriya *)
  600. (cp:57008; name:'x-iscii-ka'), (* ISCII Kannada *)
  601. (cp:57009; name:'x-iscii-ma'), (* ISCII Malayalam *)
  602. (cp:57010; name:'x-iscii-gu'), (* ISCII Gujarati *)
  603. (cp:57011; name:'x-iscii-pa'), (* ISCII Punjabi *)
  604. (cp:65001; name:'UTF-8'),
  605. (cp:65001; name:'CP65001'),
  606. (cp:65001; name:'UTF8'));
  607. { returns index in win2iconv_arr with first code page name with matching
  608. cp number (so that multiple names can be tried if necessary) }
  609. function win2iconv(cp: word): longint;
  610. var
  611. l, h, i, ccp: longint;
  612. begin
  613. l:=low(win2iconv_arr);
  614. h:=high(win2iconv_arr);
  615. repeat
  616. i:=(l+h+1) shr 1;
  617. ccp:=win2iconv_arr[i].cp;
  618. if cp=ccp then
  619. break;
  620. if cp>=ccp then
  621. l:=i
  622. else
  623. h:=i-1;
  624. until l>=h;
  625. if cp=win2iconv_arr[i].cp then
  626. begin
  627. { the array has been ordered so that in case multiple alias names
  628. exist, the first entry for the cp is the most commonly supported
  629. one
  630. }
  631. while (i>low(win2iconv_arr)) and
  632. (win2iconv_arr[i-1].cp=cp) do
  633. dec(i);
  634. result:=i;
  635. end
  636. else
  637. { or better raise an error? }
  638. result:=-1;
  639. end;
  640. function iconv2win(cpname: rawbytestring): word;
  641. var
  642. i: longint;
  643. begin
  644. { clear encoding to prevent nonsense code page conversion of the input
  645. ansistring (encoding names are always ascii) }
  646. SetCodePage(cpname,$ffff,false);
  647. { simple linear scan, not a common operation and hence not worth
  648. building a separate array for }
  649. for i:=low(win2iconv_arr) to high(win2iconv_arr) do
  650. if win2iconv_arr[i].name=cpname then
  651. begin
  652. result:=win2iconv_arr[i].cp;
  653. exit;
  654. end;
  655. { rawbytestring (or better raise an error?) }
  656. result:=65535;
  657. end;