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

标签 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 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/

相关文章:

c# - CryptoStream 可以让基本 Stream 保持打开状态吗?

c# - 如何链接接受 Func<> 委托(delegate)的方法重载? (C#)

unicode - 如何在 Tkinter 中打印非 BMP Unicode 字符(例如 𝄫)

javascript - 在 Helper 函数中使用 for 循环的正确方法 | meteor JS

android - 无法构建 cordova meteor 应用程序(错误 : ENOENT)

c# - 使用结构的子集

c# - ASP.Net Combres 和 Combres MVC with Cloudfront

c++ - 如何使用十六进制数字初始化char数组?

c++ - unicode 或任何其他编码数据如何存储在内存中? (win32)

javascript - 如何使用reactJS进行过滤?