我遇到了一个有趣的问题(在与旧系统交互时经常会出现这种情况)。 我正在开发一个应用程序(目前在x86 Linux或Windows系统上运行),可以从各种系统接收请求,其中之一是MVS系统。
我试图确定应该使用哪个代码页/字符集来解释来自MVS系统的请求数据。
过去,我使用“cp500”(IBM-500)来解释来自z/OS系统的字节数据,但我担心由于MVS是一个有点老旧的系统,并且由于IBM似乎始终在更改要使用的编码(必须有数十个EBCDIC编码),因此cp500可能不是正确的编码。
我在Java中找到的最好的字符集资源是:http://mindprod.com/jgloss/encoding。然而,从这个网站和IBM Infocenters中,我仍然没有得到明确的答案。
编辑:从我的回复中添加:
在我的问题中,请求数据的来源存在一个明显的漏洞。 在这种情况下,数据的来源是通过Websphere MQ接口。 Websphere MQ确实具有将数据转换为正确编码的功能,但这仅适用于使用MQMessage.readString()读取数据的情况,该方法已被弃用。 我更喜欢使用此方法,但我正在使用专有接口框架,无法更改从MQQueue读取消息的方式,该框架直接从队列中读取字节,因此我需要处理翻译问题。
最终答案:我想跟进一下。 结果证明,正确的字符集确实是cp500(IBM-500)。 但是,我认为结果可能会有所不同。 对于其他遇到相同问题的人,以下是一些提示:
利用Charset.availableCharsets();。 这将为您提供运行时支持的字符集映射。 我迭代了这些集并打印出了我翻译成该字符集的字节数据。 虽然它没有给我想要的答案(主要是因为我不能在数据输入时读取数据),但我想它可能对其他人有帮助。
我试图确定应该使用哪个代码页/字符集来解释来自MVS系统的请求数据。
过去,我使用“cp500”(IBM-500)来解释来自z/OS系统的字节数据,但我担心由于MVS是一个有点老旧的系统,并且由于IBM似乎始终在更改要使用的编码(必须有数十个EBCDIC编码),因此cp500可能不是正确的编码。
我在Java中找到的最好的字符集资源是:http://mindprod.com/jgloss/encoding。然而,从这个网站和IBM Infocenters中,我仍然没有得到明确的答案。
编辑:从我的回复中添加:
在我的问题中,请求数据的来源存在一个明显的漏洞。 在这种情况下,数据的来源是通过Websphere MQ接口。 Websphere MQ确实具有将数据转换为正确编码的功能,但这仅适用于使用MQMessage.readString()读取数据的情况,该方法已被弃用。 我更喜欢使用此方法,但我正在使用专有接口框架,无法更改从MQQueue读取消息的方式,该框架直接从队列中读取字节,因此我需要处理翻译问题。
最终答案:我想跟进一下。 结果证明,正确的字符集确实是cp500(IBM-500)。 但是,我认为结果可能会有所不同。 对于其他遇到相同问题的人,以下是一些提示:
利用Charset.availableCharsets();。 这将为您提供运行时支持的字符集映射。 我迭代了这些集并打印出了我翻译成该字符集的字节数据。 虽然它没有给我想要的答案(主要是因为我不能在数据输入时读取数据),但我想它可能对其他人有帮助。
请参考:http://mindprod.com/jgloss/encoding,以获取支持的字符集列表。
最后,虽然我没有确认过,但请确保您正在使用正确的JRE。我认为IBM运行时支持更多的EBCDIC字符集,而不是OpenJDK或Sun的运行时。