Автоматическое определение кодировки в 1С: внешняя native-компонента для преобразования данных в UTF-8

08.07.26

Разработка - Разработка внешних компонент

В статье описана внешняя компонента, которая решает одну из проблем при интеграциях в 1С — неизвестную кодировку входных данных. Компонента автоматически определяет кодировку и приводит текст к UTF-8. Может быть полезна при загрузке файлов, интеграциях и обмене данными с внешними системами.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Автоматическое определение кодировки в 1С: внешняя native-компонента для преобразования данных в UTF-8 + исходный код
.zip 1,18Mb ver:1.0.1
0 3 400 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

При разработке интеграций в 1С одна из частых и неприятных проблем — неизвестная кодировка входящих текстовых данных. Файлы, выгрузки из старых программ, API-ответы. Данные могут приходить в разных кодировках. В результате нередко получаем беспорядочный набор символов, непригодный для дальнейшего использования. К сожалению, штатными средствами 1С определить кодировку «на лету» невозможно.

На одном из проектов я столкнулся с задачей определения кодировки и корректного чтения файлов с нестандартной кодировкой. И ожидаемо столкнулся с тем, что в платформе 1C нет удобного механизма автоматического определения кодировки данных.

Стандартных средств в платформе немного. В БСП (Библиотека стандартных подсистем) реализован простой анализатор кодировок, поддерживающий наиболее распространённые варианты для русского языка: UTF-8 (с BOM и без), windows-1251, ibm866 и др.

В большинстве случаев этого набора достаточно для решения типовых задач.

Однако у данного подхода есть ограничения: список поддерживаемых кодировок не является исчерпывающим, а сам алгоритм анализа основан на сопоставлении символов кириллицы и латиницы.

Из-за этого в ряде случаев кодировка определяется некорректно или не определяется вовсе — особенно в файлах с числовыми данными, спецсимволами или разметкой.

В результате приходится либо подбирать кодировку вручную, либо усложнять обработку входных данных.


Функция БСП для определения кодировки:

// Автоматически определяет и возвращает кодировку текстового файла.
//
// Параметры:
//  ДанныеДляАнализа - ДвоичныеДанные, Строка - данные для определения кодировки или адрес данных.
//  Расширение         - Строка - расширение файла.
//
// Возвращаемое значение:
//  Строка
//
РаботаСФайламиСлужебныйКлиентСервер.ОпределитьКодировкуДвоичныхДанных(ДанныеДляАнализа, Расширение) Экспорт

Задача восполнения недостатка в функционале языка 1С в работе с кодировками показалась мне интересной, и чтобы закрыть этот пробел, я реализовал внешнюю компоненту, которая:

  • автоматически определяет кодировку входных данных
  • конвертирует их в UTF-8
  • работает на Windows и Linux
  • подключается как стандартная native-компонента 1С

Реализация выполнена на Rust с использованием проверенных библиотек, применяемых в браузерных движках.

  • chardetng - служит для определения кодировки по байтовой статистике данных, а не только по вхождению алфавитных символов. Лучше справляется с контентом, где часть символов искажена, — отдельные ошибки меньше влияют на общий вывод.
  • encoding_rs - выполняет непосредственно конвертацию байтов в кодировке, определённой на предыдущем шаге, в строку UTF-8. Поддерживает весь набор кодировок из стандарта Encoding Standard (WHATWG), поэтому справляется с любой известной кодировкой.

 

Во внешней компоненте реализованы две функции: 

КонверторКодировки(ДвоичныеДанные) - функция принимает двоичные данные кодировку которых определить и Возвращает строку в UTF-8 независимо от исходной кодировки.

КодировкаДанных(ДвоичныеДанные) - функция принимает двоичные данные и возвращает имя определённой кодировки переданных данных.

Компонента может быть подключена как на 32-, так и на 64-разрядных системах Windows и Linux.

 

Подключение компоненты стандартное для native-внешних компонент. Внешняя компонента упакована в zip-архив. В примере внешняя компонента загружена в макет обработки с типом "двоичные данные".

Тестирование проводилось на платформе 8.3.27

&НаКлиенте
Асинх Процедура ПодключитьВнешнююКомпонентуНаКлиенте(ИмяФайла)
	
	СистемнаяИнформация = Новый СистемнаяИнформация;
	
	
	Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 
		Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64
		Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86
		Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда
		
		Подключена = Ждать ПодключитьВнешнююКомпонентуАсинх("Обработка.Энкодер.Макет.ВнешняяКомпонента", "Encoder1c", ТипВнешнейКомпоненты.Native);
		
		Если Не Подключена Тогда
			Попытка
			Ждать УстановитьВнешнююКомпонентуАсинх("Обработка.Энкодер.Макет.ВнешняяКомпонента");
			Подключена = Ждать ПодключитьВнешнююКомпонентуАсинх("Обработка.Энкодер.Макет.ВнешняяКомпонента", "Encoder1c", ТипВнешнейКомпоненты.Native);
			Если Не Подключена Тогда
				ВызватьИсключение("Ошибка подключения внешней компоненты");
			КонецЕсли;
		Исключение 
			ВызватьИсключение("Ошибка подключения внешней компоненты");
		КонецПопытки;
		КонецЕсли;
	Иначе
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Внешняя компонена не поддерживается для операционной системы";
		Сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	
	ОбъектВК = Новый("Addin.Encoder1c.Encoder1c"); 
	ЧтениеДанных = Новый ЧтениеДанных(ИмяФайла);
	БуферДвоичныхДанных = ЧтениеДанных.ПрочитатьВБуферДвоичныхДанных();
	
	ДвоичныеДанные = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(БуферДвоичныхДанных);
	ДанныеФайла = Ждать ОбъектВК.КонверторКодировки(ДвоичныеДанные);
	
	КодировкаДанных = Ждать ОбъектВК.КодировкаДанных(ДвоичныеДанные);
	
КонецПроцедуры

&НаСервере
Процедура ПодключитьВнешнююКомпонентуНаСервере(АдресФайла)
	
	
	Если Не ПодключитьВнешнююКомпоненту("Обработка.Энкодер.Макет.ВнешняяКомпонента", "Encoder1c", ТипВнешнейКомпоненты.Native) Тогда
		ВызватьИсключение("Ошибка подключение внешней компоненты");
		Возврат;
	КонецЕсли; 
	
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
	ОбъектВК = Новый("Addin.Encoder1c.Encoder1c"); 

	ДанныеФайла = ОбъектВК.КонверторКодировки(ДвоичныеДанные);
	
	КодировкаДанных = ОбъектВК.КодировкаДанных(ДвоичныеДанные);
	
КонецПроцедуры

 

Итоги

Компонента закрывает пробел, который штатные средства 1С и типовой анализатор БСП не всегда способны решить: надёжное автоматическое определение кодировки на данных любого объёма и состава, с конвертацией в UTF-8 «из коробки», на клиенте и на сервере, под Windows и Linux.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Программист Пользователь 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.

18300 руб.

30.05.2017    57380    11    71    

48

Разработка внешних компонент Программист 1С:Предприятие 8 Бесплатно (free)

Нативная внешняя компонента для 1С 8 для чтения файлов Excel без установленного Excel и делает это быстро, файл 68МБ загружается в таблицу значений ~1 секунду. Компонента поддерживает чтение двух форматов: Excel 2007+ и Excel 97-2003 Формат файла определяется автоматически по сигнатуре (первые 8 байт файла), а не по расширению. Позволяет открывать XLS и XLSX файлы и получать содержимое листов в виде ТаблицыЗначений или JSON-массива.

03.07.2026    852    skyadmin    28    

21

Разработка внешних компонент Программист 1С 8.3 Бесплатно (free)

В современных корпоративных решениях на платформе 1С:Предприятие 8.3 всё чаще возникает потребность в визуальном моделировании и автоматизации бизнес-процессов с использованием нотации BPMN 2.0. Стандартные средства платформы не предоставляют полноценного редактора BPMN, однако интеграция открытой библиотеки bpmn-js позволяет реализовать интерактивное моделирование бизнес-процессов непосредственно в 1С. В статье рассмотрены архитектура решения, пошаговая инструкция по сборке библиотеки из исходников для WebKit, а также примеры программного взаимодействия между 1С и JavaScript.

03.04.2026    3014    SultanovStas    8    

23

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    7237    bayselonarrend    17    

54

Разработка внешних компонент Программист 1С:Предприятие 8 Россия Бесплатно (free)

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    12523    kovalevdmv    29    

83

Разработка внешних компонент Механизмы платформы 1С Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

26.01.2024    12465    starik-2005    40    

49
Для отправки сообщения требуется регистрация/авторизация