Массив байтов в xml с кодировкой UTF8 и base64?

    [return: System.Xml.Serialization.XmlElementAttribute("return", DataType="base64Binary")]
    public byte[] get(...)

Я пытаюсь получить xml (utf-8) из этого веб-сервиса. Я пробовал несколько вещей, чтобы попытаться получить xml из массива байтов, например:

stream
encoding
decoder
converter

[Дополнительная информация] При декодировании массива байтов с помощью Encoding.UTF8.GetString(bytes) я получаю строку со странными знаками и символами, но также и с некоторым текстом, начиная с: %PDF-1.4

[РЕШЕНИЕ] Запись массива байтов в файл PDF делает его читабельным.


person Kenny    schedule 19.12.2013    source источник


Ответы (2)


Я думаю, что веб-служба предоставляет поток байтов, который представляет собой просто данные в кодировке base64, представленные в виде целых чисел, а не символов. Я считаю, что символы base64 являются подмножеством ASCII, поэтому вам нужно преобразовать массив байтов в ASCII (т.е. base64, представленный в виде символов), а затем преобразовать эти символы из base64:

var base64AsAscii = Encoding.ASCII.GetString(bytesFromWebService);
var decodedBytes = Convert.FromBase64String(bytesAsAscii);
var text = Encoding.UTF8.GetString(decodedBytes);
person groverboy    schedule 19.12.2013
comment
Благодарю за ваш ответ. Я попробовал это, но я получил следующую ошибку. Введенная строка не является допустимой строкой Base-64, поскольку она содержит символ, отличный от Base 64, более двух символов заполнения или недопустимый символ среди символов заполнения. - person Kenny; 19.12.2013
comment
Это ответ после строки get. %PDF-1.4%???? 5 0 obj ‹‹/Type/XObject/ColorSpace/DeviceGray/Subtype/Image/BitsPerComponent 8/Width 319/Length 96/Height 238/Filter/FlateDecode››stream x???1 - person Kenny; 19.12.2013
comment
@Kenny - мой код включает 2 вызова GetString: какой? В любом случае, похоже, что данные base64 кодируют содержимое PDF, а не простой текст. - person groverboy; 19.12.2013
comment
Первая строка получения дает этот ответ. - person Kenny; 19.12.2013
comment
@Kenny - я пытаюсь понять это странное имя base64Binary. Вы говорите, что XML — это UTF8, поэтому, возможно, стоит попробовать UTF8 для обоих вызовов GetString? - person groverboy; 19.12.2013
comment
С другой стороны, опубликованный вами ответ (%PDF...) явно не является base64. Вы можете записать байты непосредственно в файл, назвать его с расширением .pdf и попытаться открыть его. - person groverboy; 19.12.2013
comment
@Kenny - почему данные не в формате base64, когда в атрибуте схемы указано base64Binary? Я думаю, было бы полезно, если бы вы обновили свой вопрос кодом, который получает байты с сервера. - person groverboy; 19.12.2013
comment
Можем ли мы написать в приват? Я пришлю вам URL-адрес веб-сервиса, и вы сможете увидеть метод ?? - person Kenny; 19.12.2013
comment
давайте продолжим это обсуждение в чате - person groverboy; 19.12.2013
comment
@Kenny - чат активен. - person groverboy; 19.12.2013
comment
Эй, я нашел это, это просто файл в формате PDF. Поэтому, если я напишу это в pdf, я смогу это увидеть. Теперь я пытаюсь поместить его в строку, не записывая в файл. Спасибо за помощь! - person Kenny; 19.12.2013
comment
@Кенни - Отлично. Значит ли это, что я ответил на ваш вопрос? :) - person groverboy; 19.12.2013

Вы можете попробовать Convert.ToBase64String.

person ken2k    schedule 19.12.2013
comment
Нет, это не работает. Я пробовал конвертировать методы. Можно ли как-то узнать, какое декодирование мне нужно сделать? Мне просто нужно получить данные из массива байтов - person Kenny; 19.12.2013