0

我遇到了这个问题:

我得到了一个在 WMB7 修复 6 中开发的消息流,用于与 CICS 集成。我的 CICS CCSID 是 037。代理在 z/Linux 中运行,语言环境 = en_US.UTF-8 和语言环境charmap = UTF-8。MQSeries 在 1208 中。我遇到了特殊字符的问题,例如(ñ、Ñ、á 等)

在我的消息流中,我得到了以下代码:

    DECLARE CICSRespMsg BLOB;
    DECLARE CICSRespChar CHARACTER;
    DECLARE MsgOut BLOB;
    DECLARE MsgOutChar CHARACTER;

    --EBCDIC TO ASCII
    SET CICSRespMsg = InputRoot.BLOB.BLOB;
    SET CICSRespChar = CAST(CICSRespMsg AS CHARACTER CCSID 037);
    SET MsgOut = CAST(CICSRespChar AS BLOB CCSID 850);
    SET MsgOutChar = CAST(MsgOut AS CHARACTER CCSID 850);

我尝试从 850 更改为 819,但我遇到了同样的问题。希望您能够帮助我。非常感谢!。;(

4

1 回答 1

0

所以我不能在我的“答案”中要求澄清,所以我会告诉你如何调试你的问题,因为我不能用所提供的信息为你提供一个确切的解决方案。

您已经展示了一段 ESQL,它通过 Unicode 从 ibm-037 转换为 ibm-850。由于 ibm-850 不支持 - 我预计转换会失败。但是 ibm-819,又名 latin-1,又名 iso-8859-1 确实支持该字符,并且 ñ 的转换应该成功。

不知道你在compute节点之后在做什么,所以看看你的输入输出节点,看看Properties文件夹中的CCSID。您说 MQSeries 在 1208 中,我假设您的意思是队列管理器默认 CCSID 设置为 1208。如果在输出节点上使用它,那么您将遇到问题,因为 utf-8 (ibm-1208) 与latin-1 用于这些字符。

在输入节点之后放置一个跟踪节点并跟踪到以 ${Root} 作为跟踪表达式的文件,在输出节点之前放置另一个跟踪节点,将其跟踪到不同的文件。查看字节:
- 在 037 中是 0x49
- 在 819 中是 0xf1
- 在 1208 中是 0xc3b1
如果你看到 0x1a 它已被替换字符替换。

如果您希望输出为 UTF-8,请确保使用 1208 而不是上面的 850/819,并确保 OutputRoot.Properties.CodedCharSetId 设置为 1208。

如果您希望输出为 latin-1,请使用上面的 819 并确保 OutputRoot.Properties.CodedCharSetId 设置为 819。

希望这会有所帮助,安德烈亚斯

于 2014-08-13T10:25:06.650 回答