具体问题:在JSON中应该如何格式化字符,如组分隔符(0x1D)?发送带转义字符(如组分隔符)的JSON
详情: 我继承了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”。它是微软具体的吗?
- 收到此消息的人说他们的服务器“扼杀”了此消息。没有组分隔符时没有问题。是否可以通过.json消息发送组分隔符?如果是的话如何?如果它是可行的,你将如何用C#技术解码它?
稍微更多信息:服务器人员说\ u001在他们的末尾表现为^](它表示一个不可打印的字符)。我可以在发送消息之前剥去\ u001,这可能不是一个坏主意。但是在我看来,还有其他不可打印的字符(例如CR,LF),它可能很好地保存该信息并通过.json发送。
请原谅我的模糊性。我仍然熟悉这个代码库和这些特定的想法。我确实尝试了解\ u001是什么,但无济于事。我可以要求比“窒息”更好的解释,但是想一些具体的问题会很好。如果我可以提供澄清或更多的细节,请让我知道。
什么是'rawData'?它是可以有任何值的任意字节序列吗?或者他们实际上是ASCII字符值? – dbc
据我所知,它们只是表示ascii字符值的字节。也就是说,我不相信0-127之外有任何我们需要处理的人物。我“清理”阵列大部分为0(ascii 48)。 – Dave