我有一个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)吗?
答案 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输出。