使用C#将消息写入MQ作为ASCII

时间:2017-12-27 14:18:43

标签: c# ibm-mq

我有一个XML格式或任何字符串形式的字符串,当它写入MQ时我得到了BOM。我试图在C#应用程序中将字符串转换为ASCII,但它仍然显示在MQ中的消息中。 我以为我可以在MQMessage()

中使用Encoding方法
MQQueueManager queueManager = new MQQueueManager();
queue = queueManager.AccessQueue(QueueName,
               MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING);
message = strInputMsg;
queueMessage = new MQMessage();
queueMessage.WriteString(message);
queueMessage.Format = MQC.MQFMT_STRING;
queueMessage.Encoding = MQC.MQENC_NATIVE;

queuePutMessageOptions = new MQPutMessageOptions();

queue.Put(queueMessage, queuePutMessageOptions);

我不确定queueMessage.Encoding行的值应该是什么。

另一个问题是Encoding to ASCII会删除位对象标记(BOM)吗?

1 个答案:

答案 0 :(得分:2)

如果你看这里:https://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.ref.dev.doc/q111220_.htm

  

ReadString,ReadLine和WriteString方法在Unicode之间进行转换   和消息的字符集;见CharacterSet

  

WriteString方法从Unicode转换为字符集   以CharacterSet编码。如果CharacterSet设置为其默认值,   MQC.MQCCSI_Q_MGR,为0,不进行转换   CharacterSet设置为1200.如果将CharacterSet设置为其他   value,WriteString从Unicode转换为备用值。

因此,在调用WriteString之前,您在.NET中有一个unicode字符串。 WriteString方法将该unicode转换为CharacterSet属性指示的CCSID,该属性默认为unicode,并为您提供字节顺序标记(BOM)的有趣2字节前缀。如果将其设置为例如850,然后它将根据需要从unicode转换为单字节ASCII输出。