1

我正在使用 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 编码文本消息的方法吗?

4

2 回答 2

2

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

请注意,此方法将影响全局的消息编码。

于 2012-04-10T00:42:47.477 回答
2

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

于 2012-04-18T11:58:52.283 回答