我需要制作一些ebcdic_1141 / cp1252转换。 以下是我找到的表格:
如何从中制作转换表。 我具体不明白的是40之前的十六进制值是什么?如何获取每个字符的十六进制值(我将放入一个数组中)?
谢谢, 雅各布
答案 0 :(得分:1)
至少从Windows 2000开始,IBM 1141似乎已经是Windows NT的一部分。只需要求系统管理员通过控制面板/ Windows组件安装它。
http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756.aspx
然后,根据您的Delphi版本,您可以
AnsiString
指定代码页(从中指定UnicodeString又称string
)和/或使用SetCodePage
过程MultiByteToWideChar
将PAnsiChar
转换为UTF-16,然后将其转换回1252 Jedi CodeLib
这样具有现成包装器的库,在一次调用中执行#3触发器。 请注意,您不应期望在这些字符集之间映射所有字符。一些稀有字符(如控制代码和变音符号)可能只存在于其中一个字符集中,并且可能会从其对应字符中丢失。 WideCharToMultiByte
函数具体提到了这一点。
替代方法(不一定成功)可能包括:
JCL.sf.net
有自己的JclUnicode单元,它可能有自己的内置映射,而不是依赖于Windows提供的映射。我不记得是否包含IBM1141
。IBM Classes for Unicode
也可能包含这些代码页(或者可能没有,但可能会包含这些代码页)。 Has anyone used ICU with Delphi? iconv
库在UNIX系统上启动,但是将CodeTyphon
/ Lazarus
之类的IDE移植回Windows,他们应该将libiconv
移植到Windows(可能是MSYS
项目)并包含Pascal标头。尝试安装下载CodeTyphon,看看你是否可以在Delphi中重用它的libiconv
单元。