CICS请求节点CCSID的问题

时间:2014-08-12 00:55:38

标签: cics

我遇到了这个问题:

我在WMB7修订版6中开发了一个消息流,用于与CICS集成。我的CICS CCSID是037.代理在z / Linux中运行,locale = en_US.UTF-8,locale 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,我遇到了同样的问题。希望您能够帮助我。非常感谢!。 ;(

1 个答案:

答案 0 :(得分:0)

所以我不允许在我的“答案”中要求澄清,所以我会告诉你如何调试你的问题,因为我无法为你提供所提供信息的精确解决方案。

您已经展示了一段ESQL,它通过Unicode从ibm-037转换为ibm-850。由于ibm-850不支持 - 我希望转换失败。然而ibm-819,a.k.a latin-1,a.k.a iso-8859-1确实支持角色,ñ的转换应该成功。

我不知道你在计算节点之后做了什么,所以看看你的输入和输出节点,并查看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.

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