Websphere.MQ 通信编码错误

Wrong encoding in Websphere.MQ communication

我最近遇到了我试图从一个 MQManager 发送到另一个 MQManager 的消息数据编码错误的问题。

我发送消息的 C# 代码如下:

var mqMessage = new MQMessage()
{
    CharacterSet = MQC.MQCCSI_Q_MGR,
    Format = MQC.MQFMT_STRING
};

mqMessage.MessageId = Encoding.Default.GetBytes(message.MessageId);
mqMessage.WriteString(message.Message);
writeQueue.Put(mqMessage, _putMsgOptions);

尽管 MQManager(源和目标)在配置集中具有相同的代码页 (852),但目标 MQManager 上的消息 "WARSZAWA" 被解码为 "WAęS]AWA"。

我哪里出了问题?

基于这篇知识中心文章:

http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.ref.dev.doc/q111220_.htm

当您设置 CharacterSet = MQC.MQCCSI_Q_MGR 时,WriteString 方法不会转换字符数据,因此您正在以 Unicode 格式发送数据。

根据您在接收方的阅读方式,这可能会导致您遇到问题。

我建议您将消息的CharacterSet 设置为您要使用的CCSID。每条消息都表示用于其中字符数据的代码页,您不应该依赖于队列管理器的 CCSID。