代码之家  ›  专栏  ›  技术社区  ›  Joe Cook

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

  •  2
  • Joe Cook  · 技术社区  · 7 年前

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

    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的值是多少。编码行应为。

    另一个问题是,ASCII编码是否会删除位对象标记(BOM)?

    1 回复  |  直到 7 年前
        1
  •  3
  •   JasonE    7 年前

    如果你看这里: 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\U Q\U MGR,为0,不进行转换,并且 CharacterSet设置为1200。如果将CharacterSet设置为其他 值,WriteString将Unicode转换为备用值。

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