从字节数组创建正确转义的字符串

时间:2014-03-28 02:47:56

标签: c# unicode meteor type-conversion

我有一个字节数组,从图像文件中读取,我试图通过套接字从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网络浏览器客户端查看。

1 个答案:

答案 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)));