将 byte[] 字符串转换回 byte[] 数组

Converting a byte[] string back to byte[] array

我有一种情况 class 是这样的。

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();

您需要从 base64 对其进行解码,如下所示:

假设您已将文件作为字符串读入 ss

var bytes = Convert.FromBase64String(ss);

这看起来像 base 64。使用:

System.Convert.ToBase64String(b)

https://msdn.microsoft.com/en-us/library/dhx0d524%28v=vs.110%29.aspx

System.Convert.FromBase64String(s)

https://msdn.microsoft.com/en-us/library/system.convert.frombase64string%28v=vs.110%29.aspx

这里发生了几件事。您需要知道默认 StreamWriter 的编码,如果未指定,则默认为 UTF-8 编码。但是,.NET 字符串始终是 UNICODEUTF-16.

MemoryStream from string - confusion about Encoding to use

我建议使用 System.Convert.ToBase64String(someByteArray) 及其对应的 System.Convert.FromBase64String(someString) 来为您处理此问题。