【问题标题】:Wrong encoding in Websphere.MQ communicationWebsphere.MQ 通信中的错误编码
【发布时间】:2016-09-21 10:10:56
【问题描述】:

我最近遇到了我尝试从一个 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”。

我的问题在哪里?

【问题讨论】:

  • MQMessage 类没有 MessageIdEncoding 属性。试图编译你的 sn-p 但它没有编译。我猜你在 MessageId 之后错过了一个等号,该行应该是 mqMessage.MessageId = Encoding.Default.GetBytes(message.MessageId);
  • 是的,我已经编辑过了。

标签: c# .net ibm-mq mq


【解决方案1】:

根据这篇知识中心文章:

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。

【讨论】:

  • 我尝试将 CharacterSet 设置为特定的数字,但仍然存在我描述的问题。
  • 一开始我不明白你的答案,但最后它是正确的;)。问题是使用您提到的 MQC.MQCCSI_Q_MGR 对消息进行编码,并尝试使用不同的字符集对消息进行解码。当我在消息上设置固定代码页时,问题就解决了;)。谢谢
猜你喜欢
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
相关资源
最近更新 更多