我有一个从图像文件读取的字节数组,我试图将其从 C# 通过套接字发送到运行 collectionFS (v0.3.7) 的 Meteor 服务器。
我试图将其转换为字符串,以匹配在 JavaScript 中调用 FileReader.readAsBinaryString()
得到的结果,例如:
?PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0003?\u0000\u0000\u0002?
在我的 C# 代码中,我尝试使用 System.Text.Encoding.UTF8.GetString()
,这给了我这样的结果:
�PNG\r\n\n\0\0\0\rIHDR\0\0�\0\0
传输失败,可能是因为“\0”被视为字符串结尾。
谁能更好地解释这里发生了什么? C# 中有没有像 readAsBinaryString()
那样使用 unicode 转义序列格式化字节的好方法?
编辑:此数据的最终目的地是 MongoDB(在 Meteor 中)中的 BSON 二进制条目,稍后将被提取(作为 Blob)并通过普通 Meteor Web 浏览器客户端查看。
最佳答案
没有内置方法可以完全做到这一点。
要将字节数组转换为编码,您需要决定什么是编码的,什么不是。看起来 0-9a-zA-Z
范围不应编码,其余部分编码为 \uXXXX
:
我会做如下的事情:
var result = String.Join("", byteArray
.Select(b => b >'0' && b <'9' ?
(char)b.ToString() : String.Format(@"\u{0:x4}", b)));
关于c# - 从字节数组创建正确转义的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22703269/