我有一个字节数组,从图像文件中读取,我试图通过套接字从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网络浏览器客户端查看。
答案 0 :(得分:2)
没有内置的方法可以做到这一点。
要将字节数组转换为编码,您需要确定编码的内容和不编码的内容。看起来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)));