如何解决字符串返回字节数组-不起作用
| 我有一个流被转换为字节数组。 然后,我将那个再见数组变成一个字符串。 当我尝试将该字符串转换回字节数组时,这是不正确的...请参见下面的代码。 private void Parse(Stream stream,Encoding encoding)
{
// Read the stream into a byte array
byte[] allData = ToByteArray(stream);
// Copy to a string for header parsing
string allContent = encoding.GetString(allData);
//This does not convert back right - just for demo purposes,not how the code is used
allData = encoding.GetBytes(allContent);
}
private byte[] ToByteArray(Stream stream)
{
byte[] buffer = new byte[32768];
using (MemoryStream ms = new MemoryStream())
{
while (true)
{
int read = stream.Read(buffer,buffer.Length);
if (read <= 0)
return ms.ToArray();
ms.Write(buffer,read);
}
}
}
解决方法
如果没有更多信息,我可以肯定这是一个文本编码问题。流中的文本编码很可能与指定为参数的编码不同。这将导致字节级别的值不同。
这里有一些不错的文章,它们解释了为什么您看到自己看到的东西。
每个软件开发人员绝对,肯定必须绝对了解Unicode和字符集(无借口!)
如何确定文本文件编码
有关UTF或编码形式的一般问题
, 我认为在这种情况下,可以更改
ToByteArray
方法以使用与编码匹配的StreamReader
,尽管我看不到更多的代码,但我不确定。
private byte[] ToByteArray(Stream stream,System.Text.Encoding encoding)
{
using(var sr = new StreamReader(stream,encoding))
{
return encoding.GetBytes(sr.ReadToEnd());
}
}
编辑
由于您正在使用图像数据,因此应使用Convert.ToBase64String
将byte[]
转换为string
。然后,您可以使用Convert.FromBase64String
解码将其转换回byte[]
。 encoding.GetBytes
不起作用的原因是因为byte[]
中可能有些数据无法表示为该编码的字符串。
private void Parse(Stream stream,Encoding encoding)
{
byte[] allData = ToByteArray(stream);
string allContent = Convert.ToBase64String(allData);
allData = Convert.FromBase64String(allContent);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。