Отправка текстовых сообщений UTF-8 на C # с использованием TIBCO EMS - PullRequest
1 голос
/ 30 марта 2012

Я использую библиотеку TIBCO EMS TIBCO.EMS.dll для отправки сообщений xml в очередь на сервере TIBCO EMS. Приложение, получающее эти сообщения, требует, чтобы XML был в кодировке UTF-8. Генерация XML-файла UTF-8 сама по себе не является проблемой, однако я не вижу способа отправить TextMessage в очередь, сохраняя данные в формате UTF-8.

Для сериализации объектов в XML UTF-8 я использую следующее (здесь упрощенно):

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();

Что оставляет мне байтовый массив, содержащий xml в кодировке utf-8. Я могу написать это в BytesMessage для отправки в очередь EMS.

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

Но это приводит к BytesMessage в очереди. Единственный способ получить TextMessage, который я вижу, - это использовать класс TextMessage, но свойство text этого класса является стандартной строкой Unicode, что приведет к тому, что xml потеряет свою кодировку utf-8.

Кто-нибудь знает способ отправки текстового сообщения в кодировке UTF-8?

Ответы [ 2 ]

1 голос
/ 18 апреля 2012

Кажется, что по умолчанию API TIBCO преобразует строки Unicode C # в UTF-8, когда сообщение отправляется в очередь. Хорошо для текста, но если строка использует XML и включает параметр типа кодировки, вы должны вручную изменить параметр на utf-8.

1 голос
/ 10 апреля 2012

Возможно, вы захотите попробовать вызвать метод Tibems.setEncoding ("UTF-8") перед отправкой сообщения;

Обратите внимание, что этот метод повлияет на кодировку сообщений во всем мире.

...