Конкретный вопрос: Как следует форматировать символы, такие как разделитель групп (0x1D) в JSON?Отправка JSON с escape-символами, такими как разделители групп
Деталь: Я унаследовал 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.
Прошу прощения за мою неопределенность. Я все еще знаком с этой базой кода и этими конкретными идеями. Я попытался выяснить, что делать, но безрезультатно. Я мог бы попросить лучшего объяснения, чем «задушить», но было бы неплохо иметь некоторые конкретные вопросы. Если я могу предоставить разъяснения или более подробную информацию, пожалуйста, дайте мне знать.
Что такое 'rawData'? Это произвольная последовательность байтов, которая может иметь любые значения? Или они являются значениями символов ASCII? – dbc
Насколько я знаю, это только байты, представляющие только символьные значения ascii. То есть, я не верю, что есть какие-либо символы за пределами 0-127, с которыми нам нужно иметь дело. Я «дезинфицировал» массив, чтобы иметь в основном 0s (ascii 48). – Dave