2015-11-17 4 views
1

У меня есть один сценарий с таким классом.Преобразование байта [] строка обратно в байт [] массив

Class Document 
{ 
    public string Name {get;set;} 
    public byte[] Contents {get;set;} 
} 

Теперь я пытаюсь реализовать функцию экспорта импорта, где я храню документ в двоичном поэтому документ будет в JSon файл с другими полями, и документ будет что-то в этом формате.

UEsDBBQABgAIAAAAIQCitGbRsgEAALEHAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAACAAAAAAA== 

Теперь, когда я загрузить этот файл обратно, я получаю этот файл в виде строки, и я получаю те же данные, но когда я пытаюсь преобразовать это в двоичных байтах [] файл стал поврежденным.

Как я могу это достичь?

я использую что-то вроде этого, чтобы преобразовать

var ss = sr.ReadToEnd(); 

MemoryStream stream = new MemoryStream(); 
StreamWriter writer = new StreamWriter(stream); 

writer.Write(ss); 
writer.Flush(); 
stream.Position = 0; 

var bytes = default(byte[]); 

bytes = stream.ToArray(); 
+0

Как закодирована строка? У меня были проблемы, похожие на это, и мне пришлось декодировать строку, чтобы получить правильный байт [] – Vlad274

+1

Не думаю, что я добавил какую-либо кодировку для файла. Его простое возвращение из двоичного столбца DB – Moiz

+1

Ваша строка, по-видимому, является ZIP-файлом с кодировкой base64. Вам нужно знать, в каком формате он находится, прежде чем вы сможете что-либо сделать. –

ответ

3

Вы должны ДЭ-код его от base64, как это:

Предполагая, что вы читали файл в ss в виде строки.

var bytes = Convert.FromBase64String(ss); 
2

Есть несколько вещей, которые Goin g здесь. Вам необходимо знать кодировку по умолчанию StreamWriter, если она не указана по умолчанию для UTF-8. Тем не менее, строки .NET всегда либо UNICODE, либо UTF-16.

MemoryStream from string - confusion about Encoding to use

Я хотел бы предложить использовать System.Convert.ToBase64String(someByteArray) и его коллегу System.Convert.FromBase64String(someString) справиться с этим для вас.

Смежные вопросы