使用TIBCO EMS在C#上发送UTF-8文本消息

本文关键字:UTF-8 文本 消息 TIBCO EMS 使用 | 更新日期: 2023-09-27 18:29:28

我正在使用TIBCO EMS库TIBCO.EMS.dll将xml消息发送到TIBCO EMS服务器上的队列。接收这些消息的应用程序要求XML是UTF-8编码的。生成UTF-8 xml本身并不是问题,但是我看不到在将数据保持为UTF-8格式的同时向队列发送TextMessage的方法。

为了将对象序列化为UTF-8 XML,我使用以下内容(此处简化):

XmlSerializer serializer = new XmlSerializer(data.GetType());
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms, System.Text.Encoding.UTF8);
serializer.Serialize(sw, data);
byte[] result = ms.ToArray();

这给我留下了一个包含utf-8编码的xml的字节数组。我可以将其写入BytesMessage,发送到EMS队列。。

BytesMessage message = _queueSession.CreateBytesMessage();
message.WriteBytes(result);
_queueSender.Send(message);
_queueSession.Commit();

但这会导致队列中出现BytesMessage。我能看到的获得TextMessage的唯一方法是使用TextMessage类,但该类的文本属性是标准的Unicode字符串,这将导致xml失去utf-8编码。

有人知道发送UTF-8编码文本消息的方法吗?

使用TIBCO EMS在C#上发送UTF-8文本消息

在发送消息之前,您可能需要尝试调用Tibes.setEncoding("UTF-8")方法;

请注意,此方法将在全局范围内影响消息编码。

似乎默认情况下,当消息提交到队列时,TIBCO API会将C#unicode字符串转换为UTF-8。对于文本来说很好,但如果字符串使用XML并包含编码类型选项,则必须手动将该选项更改为utf-8。