Байтов масив към 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, тъй като съдържа неосновен 64 знак, повече от два знака за допълване или незаконен знак сред знаците за допълване. - person Kenny; 19.12.2013
comment
Това е отговорът след низа за получаване. %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
@Kenny - Страхотно. Това означава ли, че отговорих на въпроса ти? :) - person groverboy; 19.12.2013

Можете да опитате Convert.ToBase64String.

person ken2k    schedule 19.12.2013
comment
Не, не работи. Опитах методите за конвертиране. Има ли все пак да знам кое декодиране трябва да направя? Просто трябва да получа данните си от байтовия масив - person Kenny; 19.12.2013