【问题标题】:How do you make conversions tables? [closed]你如何制作转换表? [关闭]
【发布时间】:2013-06-18 14:48:16
【问题描述】:

我需要进行一些 ebcdic_1141/cp1252 转换。 这是我找到的表格:

http://publib.boulder.ibm.com/infocenter/pcomhelp/v5r9/index.jsp?topic=/com.ibm.pcomm.doc/reference/html/hcp_reference02.htm

您如何从中制作转换表。 我特别不明白的是 40 之前的十六进制值是什么?以及如何获取每个字符的十六进制值(我将其放入数组中)?

谢谢, 雅各布

【问题讨论】:

  • 用什么语言?大多数语言已经包含编码转换的功能,检查你的是否支持你想要的表。
  • 我使用的语言是delphi。我没有找到任何可以使用的表格。
  • 不保证所有字符都可以映射,只有部分子集是相同的。因此,“40 岁之前”可能只是不可转换的。
  • 请在标签中指定您的 delphi 版本 - 编辑您的 q 并添加正确的标签

标签: delphi encoding delphi-xe2 type-conversion ebcdic


【解决方案1】:

至少从 Windows 2000 开始,IBM 1141 似乎已经成为 Windows NT 的一部分。只需要求系统管理员通过控制面板/Windows 组件安装它。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756.aspx

然后,根据您的 Delphi 版本,您可以

  1. 使用 TEncoding 类
  2. 使用AnsiString 至极指定的代码页(分配UnicodeString aka string)和/或使用SetCodePage 过程
  3. 使用 Win32 API MultiByteToWideCharPAnsiChar 转换为 UTF-16,然后再转换回 1252
  4. 使用像Jedi CodeLib 这样具有现成包装器的库,在一次调用中完成#3 触发器。

请注意,您不应期望在这些字符集之间映射所有字符。一些罕见的字符,如控制代码和变音符号,可能只出现在其中一个字符集中,而在对应的字符集中会被遗漏。 WideCharToMultiByte 函数特别提到了这一点。


替代方法(不一定成功)可能包括:

  1. 上述JCL.sf.net 有它自己的JclUnicode 单元,它可能有它自己的内置映射,而不是依赖于Windows 提供的映射。我不记得是否包含IBM1141
  2. IBM Classes for Unicode 也可能包含这些代码页(或者可能不包含,但可能会包含)。 Has anyone used ICU with Delphi?
  3. iconv 库在 UNIX 系统上启动,但是随着将 CodeTyphon/Lazarus 等 IDE 移植回 Windows,它们应该将 libiconv 移植到 Windows(可能作为 MSYS 项目的一部分)并包含它的 Pascal 标头.尝试安装下载 CodeTyphon 并查看是否可以在 Delphi 中重复使用其 libiconv 单元。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2012-12-09
    相关资源
    最近更新 更多