проблема кодировки base64 и UTF-8 - PullRequest
0 голосов
/ 22 февраля 2009

Я пишу простой веб-метод, который возвращает byte [], а byte [] кодируется UTF-8. Я исследовал связанные WSDL и мыльные сообщения. Кажется, базовый стек веб-служб будет использовать кодировку base64?

По разным причинам я не могу использовать или перекодировать мой возвращаемый байт [] из UTF-8 в base64. Любые идеи, чтобы изменить кодировку base64 для кодировки UTF-8?

Вот мои связанные веб-методы, сообщение SOAP и связанный тип в WSDL

Код серверной стороны веб-службы

        [WebMethod]
        public byte[] HelloWorld2()
        {
            return utf8encodedbytes;
        }

SOAP-ответ

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <HelloWorld2Response xmlns="http://tempuri.org/">
      <HelloWorld2Result>base64Binary</HelloWorld2Result>
    </HelloWorld2Response>
  </soap:Body>
</soap:Envelope>

связанный тип в WSDL

xsd:base64Binary

спасибо заранее, George

Ответы [ 2 ]

9 голосов
/ 22 февраля 2009

Боюсь, ваш вопрос не имеет особого смысла - байтовые массивы не кодируются текстовыми кодировками, такими как UTF-8. Обычно вы применяете кодировку UTF-8 к text , чтобы получить байтовый массив. Для передачи произвольных байтовых массивов в XML вы должны затем использовать base64.

Если вы хотите передать текст , вам просто нужно вернуть строку, с которой начинается.

Что такое исходные данные, прежде чем произойдет какое-либо кодирование? Если это байтовый массив, вы должны вернуть байтовый массив, и XML должен автоматически содержать данные в кодировке base64. Если это текст, вы должны вернуть строку и позволить XML справиться с кодировкой.

1 голос
/ 22 февраля 2009

Так что же мешает вам использовать Convert.ToBase64() и Convert.FromBase64()? Эти функции делают именно это: преобразование массива byte в base64 string s и наоборот.

...