I'm looking for a Win32 equivalent of the .Net Encoding.GetEncoding Method to be used in Delphi7.
What I would like to achieve is to convert a Codepage ID (ie.: 28592) to a Codepage name (iso-8859-2 in this case).
I've found a Win32 function called GetCPInfoEx, but that returns a long CodePage name, and I need the short one, like the ones listed on this page: (see Name column) http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx
Thank you!
Here is my look-up table with code, feel free to use it.
type
TCPData = record
CPID: Integer;
CPName: String;
end;
const
MaxEncodings = 140;
Encodings: Array[0..MaxEncodings - 1] of TCPData =
(
(CPID: 37; CPName: 'IBM037'),
(CPID: 437; CPName: 'IBM437'),
(CPID: 500; CPName: 'IBM500'),
(CPID: 708; CPName: 'ASMO-708'),
(CPID: 720; CPName: 'DOS-720'),
(CPID: 737; CPName: 'ibm737'),
(CPID: 775; CPName: 'ibm775'),
(CPID: 850; CPName: 'ibm850'),
(CPID: 852; CPName: 'ibm852'),
(CPID: 855; CPName: 'IBM855'),
(CPID: 857; CPName: 'ibm857'),
(CPID: 858; CPName: 'IBM00858'),
(CPID: 860; CPName: 'IBM860'),
(CPID: 861; CPName: 'ibm861'),
(CPID: 862; CPName: 'DOS-862'),
(CPID: 863; CPName: 'IBM863'),
(CPID: 864; CPName: 'IBM864'),
(CPID: 865; CPName: 'IBM865'),
(CPID: 866; CPName: 'cp866'),
(CPID: 869; CPName: 'ibm869'),
(CPID: 870; CPName: 'IBM870'),
(CPID: 874; CPName: 'windows-874'),
(CPID: 875; CPName: 'cp875'),
(CPID: 932; CPName: 'shift_jis'),
(CPID: 936; CPName: 'gb2312'),
(CPID: 949; CPName: 'ks_c_5601-1987'),
(CPID: 950; CPName: 'big5'),
(CPID: 1026; CPName: 'IBM1026'),
(CPID: 1047; CPName: 'IBM01047'),
(CPID: 1140; CPName: 'IBM01140'),
(CPID: 1141; CPName: 'IBM01141'),
(CPID: 1142; CPName: 'IBM01142'),
(CPID: 1143; CPName: 'IBM01143'),
(CPID: 1144; CPName: 'IBM01144'),
(CPID: 1145; CPName: 'IBM01145'),
(CPID: 1146; CPName: 'IBM01146'),
(CPID: 1147; CPName: 'IBM01147'),
(CPID: 1148; CPName: 'IBM01148'),
(CPID: 1149; CPName: 'IBM01149'),
(CPID: 1200; CPName: 'utf-16'),
(CPID: 1201; CPName: 'unicodeFFFE'),
(CPID: 1250; CPName: 'windows-1250'),
(CPID: 1251; CPName: 'windows-1251'),
(CPID: 1252; CPName: 'Windows-1252'),
(CPID: 1253; CPName: 'windows-1253'),
(CPID: 1254; CPName: 'windows-1254'),
(CPID: 1255; CPName: 'windows-1255'),
(CPID: 1256; CPName: 'windows-1256'),
(CPID: 1257; CPName: 'windows-1257'),
(CPID: 1258; CPName: 'windows-1258'),
(CPID: 1361; CPName: 'Johab'),
(CPID: 10000; CPName: 'macintosh'),
(CPID: 10001; CPName: 'x-mac-japanese'),
(CPID: 10002; CPName: 'x-mac-chinesetrad'),
(CPID: 10003; CPName: 'x-mac-korean'),
(CPID: 10004; CPName: 'x-mac-arabic'),
(CPID: 10005; CPName: 'x-mac-hebrew'),
(CPID: 10006; CPName: 'x-mac-greek'),
(CPID: 10007; CPName: 'x-mac-cyrillic'),
(CPID: 10008; CPName: 'x-mac-chinesesimp'),
(CPID: 10010; CPName: 'x-mac-romanian'),
(CPID: 10017; CPName: 'x-mac-ukrainian'),
(CPID: 10021; CPName: 'x-mac-thai'),
(CPID: 10029; CPName: 'x-mac-ce'),
(CPID: 10079; CPName: 'x-mac-icelandic'),
(CPID: 10081; CPName: 'x-mac-turkish'),
(CPID: 10082; CPName: 'x-mac-croatian'),
(CPID: 12000; CPName: 'utf-32'),
(CPID: 12001; CPName: 'utf-32BE'),
(CPID: 20000; CPName: 'x-Chinese-CNS'),
(CPID: 20001; CPName: 'x-cp20001'),
(CPID: 20002; CPName: 'x-Chinese-Eten'),
(CPID: 20003; CPName: 'x-cp20003'),
(CPID: 20004; CPName: 'x-cp20004'),
(CPID: 20005; CPName: 'x-cp20005'),
(CPID: 20105; CPName: 'x-IA5'),
(CPID: 20106; CPName: 'x-IA5-German'),
(CPID: 20107; CPName: 'x-IA5-Swedish'),
(CPID: 20108; CPName: 'x-IA5-Norwegian'),
(CPID: 20127; CPName: 'us-ascii'),
(CPID: 20261; CPName: 'x-cp20261'),
(CPID: 20269; CPName: 'x-cp20269'),
(CPID: 20273; CPName: 'IBM273'),
(CPID: 20277; CPName: 'IBM277'),
(CPID: 20278; CPName: 'IBM278'),
(CPID: 20280; CPName: 'IBM280'),
(CPID: 20284; CPName: 'IBM284'),
(CPID: 20285; CPName: 'IBM285'),
(CPID: 20290; CPName: 'IBM290'),
(CPID: 20297; CPName: 'IBM297'),
(CPID: 20420; CPName: 'IBM420'),
(CPID: 20423; CPName: 'IBM423'),
(CPID: 20424; CPName: 'IBM424'),
(CPID: 20833; CPName: 'x-EBCDIC-KoreanExtended'),
(CPID: 20838; CPName: 'IBM-Thai'),
(CPID: 20866; CPName: 'koi8-r'),
(CPID: 20871; CPName: 'IBM871'),
(CPID: 20880; CPName: 'IBM880'),
(CPID: 20905; CPName: 'IBM905'),
(CPID: 20924; CPName: 'IBM00924'),
(CPID: 20932; CPName: 'EUC-JP'),
(CPID: 20936; CPName: 'x-cp20936'),
(CPID: 20949; CPName: 'x-cp20949'),
(CPID: 21025; CPName: 'cp1025'),
(CPID: 21866; CPName: 'koi8-u'),
(CPID: 28591; CPName: 'iso-8859-1'),
(CPID: 28592; CPName: 'iso-8859-2'),
(CPID: 28593; CPName: 'iso-8859-3'),
(CPID: 28594; CPName: 'iso-8859-4'),
(CPID: 28595; CPName: 'iso-8859-5'),
(CPID: 28596; CPName: 'iso-8859-6'),
(CPID: 28597; CPName: 'iso-8859-7'),
(CPID: 28598; CPName: 'iso-8859-8'),
(CPID: 28599; CPName: 'iso-8859-9'),
(CPID: 28603; CPName: 'iso-8859-13'),
(CPID: 28605; CPName: 'iso-8859-15'),
(CPID: 29001; CPName: 'x-Europa'),
(CPID: 38598; CPName: 'iso-8859-8-i'),
(CPID: 50220; CPName: 'iso-2022-jp'),
(CPID: 50221; CPName: 'csISO2022JP'),
(CPID: 50222; CPName: 'iso-2022-jp'),
(CPID: 50225; CPName: 'iso-2022-kr'),
(CPID: 50227; CPName: 'x-cp50227'),
(CPID: 51932; CPName: 'euc-jp'),
(CPID: 51936; CPName: 'EUC-CN'),
(CPID: 51949; CPName: 'euc-kr'),
(CPID: 52936; CPName: 'hz-gb-2312'),
(CPID: 54936; CPName: 'GB18030'),
(CPID: 57002; CPName: 'x-iscii-de'),
(CPID: 57003; CPName: 'x-iscii-be'),
(CPID: 57004; CPName: 'x-iscii-ta'),
(CPID: 57005; CPName: 'x-iscii-te'),
(CPID: 57006; CPName: 'x-iscii-as'),
(CPID: 57007; CPName: 'x-iscii-or'),
(CPID: 57008; CPName: 'x-iscii-ka'),
(CPID: 57009; CPName: 'x-iscii-ma'),
(CPID: 57010; CPName: 'x-iscii-gu'),
(CPID: 57011; CPName: 'x-iscii-pa'),
(CPID: 65000; CPName: 'utf-7'),
(CPID: 65001; CPName: 'utf-8')
);
implementation
function GetEncoding(CPID: Integer): String;
var
I: Integer;
begin
Result := 'iso-8859-2'; //put the default encoding here
for I := 0 to MaxEncodings - 1 do
if Encodings[I].CPID = CPID then
begin
Result := Encodings[I].CPName;
break;
end;
end;
Thanks to everyone for the answers, but this proved to be the only usable solution in this case...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With