将byte[]字符串转换回byte[]数组
本文关键字:byte 数组 字符串 转换 | 更新日期: 2023-09-27 18:22:10
我有一个这样类的场景。
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();
这看起来像基数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
您需要从base64
中对其进行反编码,如下所示:
假设您已经将文件作为字符串读取到ss
中。
var bytes = Convert.FromBase64String(ss);
这里发生了一些事情。您需要知道默认StreamWriter
的编码,如果未指定,则默认为UTF-8
编码。但是,.NET字符串始终是UNICODE
或UTF-16
。
字符串中的MemoryStream-关于使用编码的困惑
我建议使用System.Convert.ToBase64String(someByteArray)
及其对应的System.Convert.FromBase64String(someString)
来为您处理此问题。