Коллеги, добрый день.
Много вариантов перепробовал, но зашел в тупик.
Есть строка пример (маркировка): "0104660250738335215.WxjhAJaFr,g\u001d9100C0\u001d92v9yeAe3q5Z"
Нужно чтобы строка не меняла вид когда мы её записываем в json, из кода убрал лишние параметры из структуры, так как они для примера не нужны ну и строку поменьше:
СтрукОтправки = Новый Структура;
СтрукОтправки.Вставить("cis","0104660250738335215.WxjhAJaFr,g\u001d9100C0\u001d92v9yeAe3q5Z");
ПараметрыJSO = Новый ПараметрыЗаписиJSON(,,,ЭкранированиеСимволовJSON.Нет,ЛОЖЬ,ЛОЖЬ,ЛОЖЬ,ЛОЖЬ,ЛОЖЬ);
JSONData = Новый ЗаписьJSON;
JSONData.ОткрытьПоток(HTTPRequest.ПолучитьТелоКакПоток(),,,ПараметрыJSO);
ЗаписатьJSON(JSONData,СтрукОтправки,,"СериализацияСсылок");
СтрокаJS = JSONData.Закрыть();
Результат = HTTPСоединение.ВызватьHTTPМетод("PUT",HTTPRequest);
Показать
По итогу получаем ответ и видим, что отправили мы не нашу строку, которую написал вышел, а где слеш, он их сделал 2 слешами.
"0104660250738335215.WxjhAJaFr,g\\u001d9100C0\\u001d92v9yeAe3q5Z"
В параметрах записи принудительно уже указываю что не нужно ничего использовать, всё равно происходит экранирование. Что стандарты json экранируют 1 слеш в 2 слеша. А мне это не надо. Как изменить чтобы отправлялся 1 слеш?
Через постман всё ок, отправляется, там вопросов нет.
Немного предистории, в самой строке сначала подменяю, где символы 91 и 92, ставлю туда спец символы:
Марк = Выборка.Маркировка;
Марк = СтрЗаменить(Марк,"91","\u001d91");
Марк = СтрЗаменить(Марк,"92","\u001d92");
(7)Base64 это не про ваш случай, т.к. сторона приемник - не ваш сервис.
Если это делает преобразование в JSON - самый простой способ не ломать голову - сделать так:
В параметрах записи принудительно уже указываю что не нужно ничего использовать, всё равно происходит экранирование.
А вы правильно указываете параметры? На ИТС все по-другому: экранирование по умолчанию отключено, а включается не четвертым параметром ПараметрыЗаписиJSON, а девятым.
(3) Спасибо, да слеш добавляется в момент преобразования в json... Но это не решает проблему...
Получается куда дальше можно копнуть, чтобы не преобразовывал? На счет base64 о чем писали ниже не совсем ясно.
(7)Base64 это не про ваш случай, т.к. сторона приемник - не ваш сервис.
Если это делает преобразование в JSON - самый простой способ не ломать голову - сделать так:
(7) Сделал костыль после преобразования в json и проблема решилась, спасибо!
Конечно бы узнать решение без костыля такого, но думаю позже кто то напишет. Не хочет добавлять как код, добавлю как текст:
ЗаписьJSON = новый ЗаписьJSON();
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтрукОтправYM);
сериализованнаяСтрока = ЗаписьJSON.Закрыть();
сериализованнаяСтрока = СтрЗаменить(сериализованнаяСтрока,"\\","\"); //КОСТЫЛЬ
HTTPRequest.УстановитьТелоИзСтроки(сериализованнаяСтрока);
Мне видится, что само направление усилий неверное. Механизм просто ОБЯЗАН что-то делать с символами, не похожими на буквы. Иначе чтение станет невозможным. Представьте семя на месте чтеца такого файла. Встретился в тексте один из символов { [ ] } кавычки, а еще есть "Перевод строки" и "Возврат каретки" (по памяти юности, 0x0D и 0x0A). Тогда стой и ломай голову, это кусок данных или управляющий символ, вроде завершить конструкцию, перевести строку и т.п.
Вывод: нельзя вставлять в строковые данные любые символы (их называют "непечатными") в оригинальном виде, как Вы хотите. А чтобы механизм их не преобразовывал, самому преобразовать в Base64. При приеме сделать обратное.