При получении данных через HTTP-запросы часто возникают ситуации, когда параметры ссылки закодированы в формате URL-encoding. В частности, это касается имен файлов, содержащих кириллицу или специальные символы. Вместо привычного текста мы видим последовательности вида %D0%9D%D0%BE.... В этой статье мы разберем, как правильно преобразовать такие данные в читаемый формат средствами платформы 1С:Предприятие.
Когда в ссылке вы видите символы %, за которыми следуют цифры и латинские буквы, это означает, что строка прошла через процесс URL-кодирования. Это необходимо для того, чтобы веб-серверы могли корректно интерпретировать передаваемые данные, так как в стандартных URL разрешен только ограниченный набор символов ASCII. Кириллица в UTF-8 кодируется несколькими байтами, каждый из которых представлен в виде шестнадцатеричного кода с префиксом %.
В платформе 1С существует встроенный метод, предназначенный для обратного преобразования таких строк. Мы не будем использовать ручной перебор или замену символов, так как это не является надежным способом. Рассмотрим применение метода РаскодироватьСтроку.
Для корректного декодирования нам необходимо передать два параметра: саму строку и способ кодирования. В подавляющем большинстве современных HTTP-запросов используется кодировка UTF-8.
Разберем пример кода для решения этой задачи:
// Исходная строка, полученная из URL-параметра filename
СтрокаКодированная = "%D0%9D%D0%BE%D0%B2%D1%8B%D0%B9%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82.txt";
// Декодируем строку
ИмяФайла = РаскодироватьСтроку(СтрокаКодированная, СпособКодированияСтроки.КодировкаURL);
// Выведем результат в окно сообщений для проверки
Сообщить("Имя файла: " + ИмяФайла);
В данном примере метод РаскодироватьСтроку с параметром СпособКодированияСтроки.КодировкаURL автоматически распознает шестнадцатеричные последовательности и преобразует их в соответствующие символы UTF-8. Это наиболее эффективный и стандартизированный способ решения данной задачи в 1С.
Вы могли заметить, что при попытке декодировать строку в различных онлайн-сервисах часто получаются нечитаемые символы («квадраты»). Это происходит из-за того, что система может ошибочно интерпретировать кодировку (например, пытаясь применить Windows-1251 вместо UTF-8). В 1С использование метода РаскодироватьСтроку гарантирует, что интерпретация байтов будет соответствовать стандартам, принятым в протоколе HTTP.
После получения корректного имени файла, мы рекомендуем выполнить следующие проверки для обеспечения стабильной работы программы:
/, \, :, *, ?, ", <, >, |). Если такие символы присутствуют, их лучше заменить на знак подчеркивания _.+. Если после декодирования вы видите «плюсы» вместо пробелов, вы можете дополнительно применить метод СтрЗаменить(ИмяФайла, "+", " ").Применяя данные методы, вы сможете быстро и надежно обрабатывать ссылки, получаемые от внешних сервисов, и преобразовывать их в корректные имена файлов для последующего сохранения в вашей информационной базе.