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 に答える