正如@Matten 所说,一个问题可能是字符编码。
默认值字符集 http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic=/com.ibm.mq.amqtan.doc/wc11820_.htm属性是 1200 (UNICODE) 并且写字符串 http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic=/com.ibm.mq.amqtan.doc/wc11820_.htm转换为CharacterSet指定的代码页。
代码页 1200 是 UTF-16 小尾数法,因此每个字符可能会获得两个字节。 “Put Test Message”当然有可能使用某种其他编码,对常见字符使用每个字符一个字节。
假设3600和1799长度以字节为单位计算,它们可以表示1800个UTF-16LE字符和1799个UTF-8字符(或1799个ASCII字符或1799个EBCDIC字符...)。
这仍然使我们在长度上存在一个字符的差异。也许 WriteString 在写入的字符串中包含终止 NULL 字符?
您确定相信 Notepad++ 给您的计数吗?如果“放置测试消息”将 1799 个字符放入消息中,则您提供给消息的数据中可能有 1799 个字符。
Edit:假设编码理论是正确的,您可以使用不同的编码来缩短消息。编码使特定消息变得多短取决于字符串的实际内容。
例如,您可以使用 ASCII 编码来获取每个字符一个字节。
MQMessage queueMessage = new MQMessage();
queueMessage.CharacterSet = 437; // Set code page to ASCII
这会将您的消息缩短至 1800 字节ifxml 字符串中的所有字符都有 ASCII 表示形式。
另一种方法是使用 UTF-8 编码。
MQMessage queueMessage = new MQMessage();
queueMessage.CharacterSet = 1208; // Set code page to UTF-8
使用 UTF-8 的优点是(与 ASCII 不同)所有字符都有表示形式(对于“all”的某些值)。缺点是有些字符需要两个、三个甚至四个字节来表示。最常见的字符用一个字节编码,然后次最常见的字符用两个字节编码,依此类推。
在最好的情况下,UTF-8 编码也将为您提供 1800 字节。在最坏的情况下,它会给你 7200 字节,但这似乎不太可能,除非你使用像克林贡语这样的东西!