【发布时间】:2016-11-05 16:15:21
【问题描述】:
具体问题:JSON中的组分隔符(0x1D)等字符应该如何格式化?
详情: 我继承了一个 C# 代码库,它正在读取一些条形码,将它们放入 JSON 消息中并将它们发送到服务(不一定是基于 C# 或 Windows!)
代码采用字节数组如:
byte[] rawData = { 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 29, 49,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48};
并使用这样的代码将此字节数组转换为放入 .json 中的字符串:
string dataNew = Regex.Unescape(new string(Encoding.ASCII.GetString(rawData).ToCharArray()));
.json 的相关部分如下所示:
"Notes": [
{
"Id": 0,
"Details": "Produc code: CodeType: DataMatrix, Data: 000000000000000000000000000004\u001d1000000000000000",
"Active": true,
"Acknowledged": false,
"Reported": false
}
],
如您所见,Encoding.ASCII.GetString... 处理 ASCII 字符 29 (0x1d) 略有不同。它输入了一个“\u001”。如果您不输入 Regex.Unescape,它会输入“\\u001”。我对编码和 .json 感到不安。谁能告诉我:
- 什么是“\u001”。是 Microsoft 特有的吗?
- 收到此消息的人们表示他们的服务器“阻塞”了此消息。没有组分隔符时没有问题。可以通过 .json 消息发送组分隔符吗?如果是这样怎么办?如果可行,您将如何使用 C# 技术对其进行解码?
更多信息:服务器人员说 \u001 最终呈现为 ^] (表示不可打印的字符)。我可以在发送消息之前去掉 \u001,这可能不是一个坏主意。但我突然想到还有其他不可打印的字符(例如 CR、LF),最好保留该信息并通过 .json 发送。
请原谅我的含糊不清。我仍然熟悉这个代码库和这些特殊的想法。我确实尝试找出 \u001 是什么,但无济于事。我可以要求比“窒息”更好的解释,但如果能想到一些具体问题就好了。如果我可以提供澄清或更多详细信息,请告诉我。
【问题讨论】:
-
什么是
rawData?它是可以具有任何值的任意字节序列吗?还是它们实际上是 ASCII 字符值? -
据我所知,它们是仅代表 ascii 字符值的字节。也就是说,我不相信我们需要处理 0-127 之外的任何字符。我“清理”了数组,使其大部分为 0(ascii 48)。
标签: c# json json.net escaping ascii