【问题标题】:Converting a byte[] string back to byte[] array将 byte[] 字符串转换回 byte[] 数组
【发布时间】:2015-11-17 12:45:25
【问题描述】:

我有一个这样的课程场景。

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

【问题讨论】:

  • 字符串是如何编码的?我遇到过类似的问题,我必须解码字符串以获得正确的字节[]
  • 我认为我没有为文件添加任何编码。它简单地从 DB 的二进制列返回
  • 您的字符串似乎是 base64 编码的 ZIP 文件。在你做任何事情之前,你需要确切地知道它是什么格式。
  • 作为辅助操作,请确保您在必要时处理您的对象。 msdn.microsoft.com/en-us/library/yh598w02.aspx
  • @LucasTrzesniewski - 不,你没有。如果它看起来像 Base64,那么您可以按照其他答案的建议使用 FromBase64String()

标签: c# binary-data


【解决方案1】:

这看起来像 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

【讨论】:

    【解决方案2】:

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

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

    var bytes = Convert.FromBase64String(ss);
    

    【讨论】:

      【解决方案3】:

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

      MemoryStream from string - confusion about Encoding to use

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-27
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 2013-02-18
        • 2013-01-17
        • 2015-09-04
        • 2013-03-08
        相关资源
        最近更新 更多