При интеграции 1С с внешними REST API, веб-сервисами и транспортными компаниями разработчики регулярно сталкиваются с ответами, в которых кириллические символы и специальные знаки представлены в виде экранированных последовательностей Unicode вида \u0410\u0431\u0430\u043a\u0430\u043d (что соответствует строке «Абакан»).
Разберем причины появления такого формата, а также рассмотрим простые и надежные способы преобразования подобных строк в обычный читаемый текст на платформе 1С:Предприятие.
Последовательность символов вида \uXXXX (где XXXX — шестнадцатеричный код символа в таблице Unicode) называется Unicode Escape Sequence. Это стандартный способ экранирования символов в форматах JSON и JavaScript. Он применяется для безопасной передачи текста вне базового набора ASCII через сетевые протоколы, исключая проблемы с несовпадением кодировок (например, Windows-1251, UTF-8 или ISO-8859-1) на стороне клиента и сервера.
Так как этот формат является частью стандарта JSON, для его раскодирования в 1С не требуется писать собственные сложные парсеры или вызывать внешние COM-скрипты. Достаточно воспользоваться штатным функционалом платформы для работы с JSON.
Проанализируем самый быстрый и лаконичный вариант. Если мы получаем отдельную строку или фрагмент текста, закодированный последовательностями \uXXXX, мы можем представить его как строковый литерал JSON, просто обрамив исходную строку в двойные кавычки, и прочитать с помощью встроенной функции ПрочитатьJSON().
Посмотрим на пример реализации универсальной функции декодирования:
Функция РаскодироватьСтрокуЮникод(Знач ИсходнаяСтрока) Экспорт
ЧтениеJSON = Новый ЧтениеJSON;
// Оборачиваем строку в кавычки для создания валидного строкового литерала JSON
ЧтениеJSON.УстановитьСтроку("""" + ИсходнаяСтрока + """");
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Возврат Результат;
КонецФункции
Разберем по шагам, почему этот способ предпочтительнее ручного разбора:
\uXXXX, но и стандартные экранированные управляющие конструкции JSON, такие как \n (перенос строки), \t (табуляция), \" (кавычка) и \\ (обратный слэш).\uD83D\uDE00. Штатный механизм ПрочитатьJSON корректно объединяет такую пару в один итоговый символ.Рассмотрим вариант, предложенный в процессе обсуждения на форуме. Он основан на пошаговом обходе токенов через объект ЧтениеJSON. Этот подход полезен, если вы обрабатываете большой входящий поток данных или кастомную структуру.
Посмотрим на пример кода:
ИсходнаяСтрока = "\u0410\u0431\u0430\u043a\u0430\u043d";
ЧтениеJSON = Новый ЧтениеJSON;
// Для распознавания токена строки также необходимо наличие кавычек
ЧтениеJSON.УстановитьСтроку("""" + ИсходнаяСтрока + """");
Пока ЧтениеJSON.Прочитать() Цикл
Если ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.Строка Тогда
РаскодированныйТекст = ЧтениеJSON.ТекущееЗначение;
Сообщить("Результат: " + РаскодированныйТекст);
КонецЕсли;
КонецЦикла;
ЧтениеJSON.Закрыть();
При использовании данных методов необходимо учитывать следующие технические особенности платформы 1С:
ЧтениеJSON, ЗаписьJSON и функция ПрочитатьJSON доступны начиная с версии платформы 8.3.6. На более старых версиях (8.2 или ранних 8.3) этот функционал отсутствует.MSScriptControl.ScriptControl или htmlfile) не могут работать в среде Linux и на 64-разрядных серверах без специализированных оберток.ПрочитатьJSON их необходимо дополнительно экранировать (заменять символ " на \").