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

本文关键字:转义 字符串 创建 字节 字节数 数组 | 更新日期: 2023-09-27 17:54:30

我有一个字节数组,从一个图像文件中读取,我正试图通过套接字从c#发送到运行collectionFS (v0.3.7)的流星服务器。

我正试图将其转换为字符串,以匹配我将从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#中是否有一个很好的方法来格式化字节使用unicode转义序列像readAsBinaryString()一样?编辑:这些数据的最终目的地是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)));