具體問題:在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