Как преобразовать значение из JSON (эмодзи) в HTML-код в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто при работе с вебхуками от Telegram или других сервисов разработчики 1С сталкиваются с тем, что текстовые поля содержат Unicode-символы, выходящие за рамки стандартной кодировки (например, эмодзи). Такие символы приходят в JSON в виде так называемых суррогатных пар, например \uD83E\uDD5D. Давайте разберемся, как правильно прочитать такие данные и преобразовать их в необходимый формат.

Понимание природы проблемы

Символы за пределами базовой многоязычной плоскости (BMP) кодируются в формате UTF-16 как пара 16-битных значений. Многие разработчики ошибочно пытаются декодировать их вручную, выполняя сложные битовые операции. Однако современные платформы 1С:Предприятие, использующие актуальные библиотеки ICU, умеют обрабатывать такие строки автоматически при парсинге JSON.

Решение задачи с помощью объекта ЧтениеJSON

Вместо того чтобы вручную заниматься пересчетом шестнадцатеричных значений в десятичные, воспользуемся встроенным механизмом ЧтениеJSON. Этот объект берет на себя всю работу по декодированию сущностей, присланных в формате \uXXXX.

Рассмотрим пример кода, который позволяет считать строку из JSON и получить доступ к символу:


ЧтениеJSON = Новый ЧтениеJSON;
Стр = "{""F"":""\uD83E\uDD5D""}";
ЧтениеJSON.УстановитьСтроку(Стр);
РезультатПарсинга = ПрочитатьJSON(ЧтениеJSON);
Сообщить(РезультатПарсинга.F);

После выполнения этого кода в переменной РезультатПарсинга.F будет содержаться реальный символ, который можно передавать дальше в бизнес-логику вашей системы.

Отображение символов в системе

Важно помнить, что если вы видите в отладчике или поле ввода «квадратик» или «вопрос», это не означает, что данные в строке испорчены. Проблема чаще всего кроется в отсутствии соответствующего глифа в шрифте, который использует конкретный элемент формы или ваша операционная система для отображения текста.

Рекомендации по проверке:

  1. Убедитесь, что вы используете современную версию платформы 1С:Предприятие (где обновлена библиотека ICU).
  2. Проверьте вывод данных в текстовый документ 1С, так как поля ввода форм могут иметь программные ограничения по отображению эмодзи.
  3. Если вам необходимо получить именно строковое представление HTML Entity (например, 🥝), вы можете получить код символа, используя встроенные функции обработки строк, если платформа позволяет корректно прочитать символ после парсинга JSON.

Математический подход к преобразованию

Если по каким-то причинам стандартный парсер не подходит, или вам нужно самостоятельно вычислить десятичный код для формирования HTML-тега, используйте формулу для суррогатных пар:

Для символа \uD83E\uDD5D:

В результате вы получите 0x1F95D в шестнадцатеричном виде, что соответствует 129373 в десятичном формате. Именно это число вы вставляете в конструкцию 🥝, которую понимают любые современные браузеры.

Заключение

Подводя итог, можно сказать, что лучшим решением является использование штатных методов ЧтениеJSON. Это позволяет избежать ошибок при ручном расчете суррогатных пар. Если данные корректно считываются, используйте полученную строку напрямую — современные браузеры и веб-интерфейсы прекрасно понимают Unicode-символы, и преобразование в формат 🥝 часто не требуется, если только вы не готовите специфический HTML-код для старых систем.

← На главную