2016-09-21 32 views
1

私は最近、あるMQManagerから別のMQManagerに送信しようとしているメッセージデータのエンコーディングが間違っているという問題に遭遇しました。Websphere.MQ通信で間違ったエンコーディング

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); 

両方MQManagers(送信元と送信先が)、メッセージ「WARSZAWA」コンフィギュレーション・セットで同じコードページ(852)を持っているという事実にもかかわらず、次のようにメッセージが行く送信

私のC#コード宛先MQManager上の "WAKA" AWA "としてデコードされます。

どこに問題がありますか?このknowledgecenterの記事に基づいて

+0

MQMessageクラスにはMessageIdEncodingプロパティがありません。スニペットをコンパイルしようとしましたが、コンパイルされません。私はあなたがMessageIdの後に等号を忘れたと思います。行はmqMessage.MessageId = Encoding.Default.GetBytes(message.MessageId)だったはずです。 – Shashi

+0

確かに、私はそれを編集しました。 – Sudet

答えて

2

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に依存しないでください。

+0

CharacterSetを特定の番号に設定しようとしましたが、これまでに説明した問題がありました。 – Sudet

+0

最初は私はあなたの答えを理解していませんでしたが、結局は正しいです;)。 MQC.MQCCSI_Q_MGRを使用してメッセージをエンコードし、異なる文字セットを使用してメッセージをデコードしようとすると、問題が発生しました。メッセージに固定コードページを設定すると問題は解決しました;)ありがとう – Sudet

関連する問題