gpt4 book ai didi

java - 应该使用什么代码页/字符集来将来自 MVS 系统的数据解释为 Java 环境?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:56 24 4
gpt4 key购买 nike

我遇到了一个有趣的问题(在与遗留系统交互时经常遇到这种情况)。我正在开发一个应用程序(目前在 x86 Linux 或 Windows 系统上运行),它可以接收来自各种系统的请求,其中一个是 MVS 系统。

我正在尝试确定应该使用哪个代码页/字符集来解释来自 MVS 系统的请求数据。

过去,我使用“cp500”(IBM-500) 来解释 z/OS 系统的字节日期,但我担心,因为 MVS 有点像遗留系统,而且 IBM 似乎关于使用什么编码(必须有数十种 EBCDIC 编码)始终改变想法,cp500 可能不是正确的编码。

我找到的有关 Java 字符集的最佳资源是:http://mindprod.com/jgloss/encoding .但是,从这个站点和 IBM 信息中心,我无法得到明确的答案。

编辑:从我对以下 Pax 的回复中添加:

我的请求数据来源问题中有一个明显的漏洞。在这种情况下,数据的来源是通过 Websphere MQ 接口(interface)。 Websphere MQ 确实具有转换为正确编码的工具,但是这仅适用于使用 MQMessage.readString() 读取数据,此后已被弃用。我更愿意使用它,但是我使用的是专有接口(interface)框架,在该框架中我无法更改消息从 MQQueue 中读取的方式,它直接从队列中读取字节,因此我只能处理翻译。

最终答案:我想跟进这个。事实证明正确的字符集确实是 cp500 (IBM-500)。但是,我的印象是结果可能会有所不同。给遇到同样问题的其他人的一些提示:

利用 Charset.availableCharsets();。这将为您提供运行时支持的字符集的映射。我遍历这些集合并打印出翻译成该字符集的字节数据。虽然它没有给我想要的答案(主要是因为我无法读取传入的数据),但我认为它可能对其他人有所帮助。

引用:http://mindprod.com/jgloss/encoding获取支持的字符集列表。

最后,虽然我还没有确认这一点,但请确保您使用的是正确的 JRE。我认为 IBM 运行时比 OpenJDK 或 Sun 的运行时支持更多的 EBCDIC 字符集。

最佳答案

“MVS 有点像遗留系统”?哈!它仍然是将可靠性放在首位的应用程序的首选操作系统。现在回答你的问题:-)

这完全取决于生成数据的内容。例如,如果您只是从主机下载文件,FTP 协商可能会处理它。但是既然你提到了 Java,它可能通过 JDBC 连接到 DB2/z,并且 JDBC 驱动程序会很好地处理它(如果你使用 IBM 自己的 JRE 而不是 Sun 版本会更好)。

主机上的 EBCDIC 本身有很多不同的编码,因此您至少需要让我们知道数据的来源。最新版本的 DB2 在数据库中存储 Unicode 没有问题,这将减轻您的所有顾虑。

第一个任务,找出数据的来源并从您的 SysProg 获取编码(如果它没有自动处理)。

更新:

Andrew,根据您声明不能使用提供的翻译的添加文本,您将不得不使用手动方法。您需要确定数据源并从中获取 CCSID。然后手动与 Unicode(或您使用的任何代码页,如果不是 Unicode)进行相互转换。

CCSID 500 是 EBCDIC International(无欧元)的默认代码页,但这些机器在全局范围内使用。 z/OS 转换服务是您通常在大型机上进行转换的方式。

尽管this是一个 iSeries 页面,它列出了大量的 CCSID 及其字形,同样适用于大型机。

您可能只需要弄清楚您使用的是 CCSID 500 还是 37(或其中一种外语版本)并计算出与 Unicode CCSID 1208 的映射。您的 SysProg 将能够告诉您是哪一个。如果您在一家美国公司工作,可能 500 或 37,但 IBM 花费了大量精力来支持多个代码页。如果他们所有的大型机软件都默认存储并使用 Unicode,我会很高兴,这会让事情变得容易得多。

关于java - 应该使用什么代码页/字符集来将来自 MVS 系统的数据解释为 Java 环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/818759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com