【问题标题】:Sending UTF-8 Text Messages on C# using TIBCO EMS使用 TIBCO EMS 在 C# 上发送 UTF-8 文本消息
【发布时间】:2012-04-18 19:58:52
【问题描述】:

我正在使用 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 类,但该类的 text 属性是标准 Unicode 字符串,这将导致 xml 失去其 utf-8 编码。

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

【问题讨论】:

    标签: c# utf-8 tibco ems


    【解决方案1】:

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

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

    【讨论】:

    • 在EMS客户端库的最新版本中,还有对单个消息设置编码的方法:TIBCO.EMS.Tibems.SetMessageEncoding(Message message, string encodingName)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多