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

C# 从字节数组创建正确转义的字符串,c#,unicode,meteor,type-conversion,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.Encod

我有一个从图像文件读取的字节数组,我正试图通过套接字从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语言中,是否有一种很好的方法可以使用unicode转义序列(如
readAsBinaryString()
does)格式化字节


编辑:此数据的最终目的地是MongoDB中的BSON二进制条目(在Meteor中),稍后将被提取(作为Blob)并通过普通Meteor web浏览器客户端查看

没有一个内置的方法可以做到这一点

要将字节数组转换为编码的,您需要确定哪些是编码的,哪些不是。看起来不应该对范围进行编码,其余部分编码为
\uxxx

我会做如下的事情:

var result = String.Join("", byteArray
   .Select(b => b >'0' && b <'9' ? 
       (char)b.ToString() : String.Format(@"\u{0:x4}", b)));
var result=String.Join(“),byteArray

.Select(b=>b>'0'&&b将简单地将每个字节编码为十六进制工作(更简单,大量重复)?我可以试一下,尽管我怀疑出于某种原因它需要unicode转义。我会更新这个问题,但此数据的最终目的地是MongoDB中的BSON二进制条目。有趣的是,这基本上是可行的,但我不得不将其改为
((char)b.ToString())<代码>。我不理解这个编码,它看起来是一些奇怪的混合系统。谢谢!@ WieldCaseBi-内嵌代码修复。谢谢。考虑转换检查“字节不转换”为<代码>哈什特。包含< /C> >如果你决定超过0到9个字符不应该被转换。