我遇到了这个问题:
我在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,我遇到了同样的问题。希望您能够帮助我。非常感谢!。 ;(
答案 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.
希望这有帮助, 安德烈亚斯