Я использую библиотеку 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?