Администрирование · 11 мин
Какая кодировка используется в 1С и как исправить проблемы с отображением
Какая кодировка используется в 1С: UTF-8, UTF-16, ANSI. Как определить кодировку файла, исправить кракозябры при обмене данными и настроить выгрузку.
Вопрос о кодировке в 1С возникает чаще всего в трёх ситуациях: при обмене данными с внешними системами, при выгрузке файлов (CSV, XML, TXT) и когда вместо русского текста появляются «кракозябры» — нечитаемые символы. Чтобы решить проблему, нужно понимать, какие кодировки платформа 1С использует внутри себя и какие применяет при работе с файлами.
Внутри платформа 1С хранит строки в Unicode — это означает, что в памяти и в базе данных текст не привязан к однобайтовой кодировке вроде Windows-1251. Проблемы начинаются на границе системы: когда 1С читает или записывает текстовый файл, отправляет HTTP-запрос, формирует печатную форму для сторонней программы или обменивается данными с сайтом.
Наиболее частые внешние кодировки, с которыми сталкиваются пользователи и разработчики 1С — UTF-8, UTF-16, Windows-1251 (ANSI), KOI8-R и DOS-кодировка CP866. Каждая из них появляется в своих сценариях: банковские выгрузки, старые базы данных, файлы от поставщиков, интеграция с Linux-системами.
Какие кодировки использует платформа 1С
Строки в памяти и в полях базы данных 1С хранятся в Unicode. В клиент-серверном варианте конкретное представление зависит от СУБД: MS SQL Server использует типы NVARCHAR (UTF-16), PostgreSQL обычно работает с базой в UTF-8. Для пользователя и разработчика это прозрачно — внутри конфигуратора и режима «Предприятие» с кодировкой сталкиваться не приходится.
При файловых операциях ситуация иная. Объекты ЧтениеТекста, ЗаписьТекста, ЧтениеXML, ЗаписьJSON позволяют явно указать кодировку. Если кодировка не указана, платформа применяет значение по умолчанию — как правило, UTF-8, но поведение зависит от конкретного объекта и версии платформы, поэтому полагаться на умолчание при обмене с внешними системами рискованно.
Отдельный случай — файловая база и служебные файлы. Файл 1Cv8.1CD имеет собственный внутренний формат, и «сменить его кодировку» нельзя. А вот настройки списка баз в файле ibases.v8i хранятся в UTF-8, что важно при его ручном редактировании.
Где чаще всего возникают проблемы с кодировкой
Первая типовая ситуация — обмен с банками и старыми учётными системами. Некоторые банковские форматы и выгрузки из программ, работающих ещё с DOS-времён, используют Windows-1251 или CP866. Если такой файл открыть как UTF-8, кириллица превратится в последовательности вида «РџСЂРёРІРµС‚».
Вторая ситуация — выгрузка CSV для Excel или сторонних аналитических инструментов. Excel в русской локали Windows по умолчанию ожидает ANSI (Windows-1251) для CSV-файлов без BOM. Файл, записанный из 1С в UTF-8 без BOM, Excel может открыть с искажёнными русскими буквами, хотя сам файл корректен.
Третья — интеграция через HTTP и веб-сервисы. Если тело запроса или ответа передаётся в одной кодировке, а заголовок Content-Type указывает другую (или не указывает её вовсе), приёмник интерпретирует байты неверно. Четвёртая — печатные формы и отчёты, выгружаемые в PDF или отправляемые на печать через внешние компоненты, где шрифт не содержит нужных глифов.
UTF-8 прочитан как Windows-1251 — самый частый случай
Windows-1251 прочитан как Latin-1 или UTF-8
Символы потеряны при конвертации в кодировку без кириллицы — данные уже испорчены
Проблема не в кодировке, а в шрифте без нужных глифов
Как определить кодировку файла
Прежде чем менять настройки обмена, определите фактическую кодировку проблемного файла. Самый простой способ — открыть файл в редакторе Notepad++: в меню «Кодировки» видно текущее определение, а переключение между UTF-8 и ANSI позволяет быстро проверить, в каком варианте текст становится читаемым.
Второй признак — наличие BOM (Byte Order Mark), служебных байтов в начале файла. UTF-8 с BOM начинается с байтов EF BB BF, UTF-16 LE — с FF FE. Файл в Windows-1251 не имеет BOM в принципе. Просмотреть первые байты можно любым hex-редактором или командой в терминале.
Из самой 1С кодировку можно проверить программно: прочитать файл как двоичные данные и посмотреть первые байты, либо перебрать чтение с разными кодировками и проверить, при какой строка содержит ожидаемый текст. Это полезно при автоматической загрузке файлов от контрагентов, формат которых не стабилен.
// Пример: чтение файла с явным указанием кодировки
Чтение = Новый ЧтениеТекста("C:\Обмен\bank.txt", КодировкаТекста.UTF8);
Строка = Чтение.ПрочитатьСтроку();
Чтение.Закрыть();
// Для старых банковских форматов: КодировкаТекста.ANSI или КодировкаТекста.OEMКак явно задать кодировку при чтении и записи
Правило номер один при разработке обменов: всегда указывайте кодировку явно, даже если значение по умолчанию сейчас работает. Версии платформы и настройки окружения меняются, а явный параметр делает поведение предсказуемым на любом сервере.
Для текстовых файлов используйте перечисление КодировкаТекста: UTF8, UTF16, ANSI (соответствует системной однобайтовой кодировке, в русской Windows — 1251), OEM (CP866), UTF8БезBOM. Для XML-документов кодировка указывается в объявлении документа и параметрах ЗаписьXML; для JSON — в параметрах ЗаписьJSON и настройках сериализации.
При HTTP-обмене кодировка задаётся через заголовок Content-Type, например application/xml; charset=utf-8, и должна совпадать с фактической кодировкой тела запроса. Расхождение заголовка и содержимого — частая причина «кракозябр» на стороне приёмника даже при корректном файле.
- 1Сохраните исходный проблемный файл и сделайте его копию для экспериментов
- 2Откройте копию в Notepad++ и определите фактическую кодировку
- 3Сверьте её с кодировкой, указанной в коде чтения или настройках обмена 1С
- 4Укажите правильную кодировку явно (UTF8, ANSI, OEM)
- 5Повторите загрузку и проверьте кириллицу, цифры и спецсимволы
- 6Зафиксируйте согласованный формат с контрагентом письменно
Настройка кодировки в типовых обменах
В типовых конфигурациях (УТ, ERP, Бухгалтерия) обмены с банками, ЕГАИС, ЭДО и сайтами уже настроены, и менять кодировку в коде не требуется. Если проблема возникает в типовом обмене, сначала проверьте версию конфигурации и формат обмена — устаревший формат может не совпадать с текущими требованиями внешней системы.
При выгрузке на сайт (например, по протоколу CommerceML) файлы формируются в UTF-8. Если на стороне сайта русские названия искажены, проблема почти всегда в настройках веб-сервера или базы сайта, а не в 1С — исправлять нужно там.
Для собственных обработок выгрузки в Excel выбирайте: либо CSV в Windows-1251 (ANSI) с разделителем «точка с запятой» для русской локали, либо UTF-8 с BOM — такой файл современный Excel распознаёт корректно. UTF-8 без BOM для Excel — худший вариант.
Выбор кодировки для выгрузки файлов
Универсальный вариант для Excel и современных систем; не подходит для строгих API, не принимающих BOM
Стандарт для веб-API, JSON и Linux-систем; Excel может открыть с кракозябрами
Нужна для старых банковских и учётных программ; не поддерживает символы вне кириллицы и латиницы
Только для совместимости с DOS-форматами и некоторым кассовым оборудованием
Ограничения и риски при работе с кодировками
Главный риск — необратимая порча данных. Если текст один раз сохранён с потерей символов (например, кириллица заменена на знаки вопроса при конвертации в Latin-1), восстановить его из испорченного файла невозможно. Поэтому любые эксперименты с перекодированием делайте на копии, а исходники обмена храните.
Второй риск — двойная перекодировка в цепочке систем: 1С → промежуточный сервис → сайт. На каждом шаге кодировка может преобразовываться, и диагностировать нужно всю цепочку, снимая файл на каждом этапе. Третье ограничение — BOM: некоторые парсеры и API отвергают файлы с BOM, поэтому для машинного обмена предпочтителен UTF-8 без BOM, а для человеческого открытия в Excel — с BOM.
Частые ошибки и как их избежать
Самая распространённая ошибка — «лечение симптома»: разработчик подбирает кодировку перебором, пока текст не станет читаемым на его машине, но не фиксирует согласованный формат с внешней системой. На другом компьютере с иной локалью проблема возвращается.
Вторая ошибка — игнорирование BOM при сравнении файлов и контрольных сумм: два визуально одинаковых файла в UTF-8 с BOM и без него различаются байтами, что ломает проверки целостности. Третья — смешение кодировок внутри одного файла, когда части документа формируют разные механизмы; такой файл не читается корректно ни в одной кодировке.
Что важно запомнить
Внутри 1С строки хранятся в Unicode, проблемы возникают только на границе с файлами и внешними системами. Всегда указывайте кодировку явно, определяйте фактическую кодировку чужого файла до настройки обмена, для Excel выгружайте UTF-8 с BOM или ANSI, а эксперименты проводите на копиях данных.
Частые вопросы о кодировках в 1С
Почему в файле из 1С вместо русских букв знаки вопроса?
Знаки вопроса означают, что текст уже был записан в кодировку, не содержащую кириллицу (например, Latin-1), и символы потеряны на этапе записи. Восстановить их из этого файла нельзя — нужно найти место в коде, где происходит некорректная запись, указать UTF-8 или ANSI и сформировать файл заново из исходных данных.
Какую кодировку выбрать для выгрузки в Excel?
Два рабочих варианта: CSV в Windows-1251 (ANSI) с разделителем «точка с запятой» для русской локали Windows, либо UTF-8 с BOM — современный Excel корректно определяет его по служебным байтам. UTF-8 без BOM Excel часто открывает с искажённой кириллицей.
Чем отличаются ANSI и OEM в перечислении КодировкаТекста?
ANSI — это системная однобайтовая кодировка Windows, в русской локали это Windows-1251. OEM — кодировка консоли, в русской локали CP866. Для банковских файлов чаще нужна ANSI, для старых DOS-форматов и части торгового оборудования — OEM.
Кракозябры внутри базы 1С — это проблема кодировки?
Не всегда. Если искажение появилось после загрузки из файла или обмена — да, причина в неверной кодировке чтения. Если текст испорчен в записях, которые вводились вручную, возможны повреждение данных или проблемы на уровне СУБД. В любом случае сначала сделайте резервную копию и не запускайте массовые исправления вслепую.
Можно ли поменять кодировку файловой базы 1Cv8.1CD?
Нет. Файл базы имеет внутренний формат платформы, строки в нём хранятся в Unicode, и понятие «кодировка базы» к нему не применимо. Кодировку имеет смысл настраивать только для внешних файлов обмена, HTTP-запросов и служебных текстовых файлов вроде ibases.v8i, который хранится в UTF-8.
Почему обмен с сайтом работал, а после переезда на другой сервер появились кракозябры?
Файлы обмена 1С формирует в UTF-8 независимо от сервера, поэтому причина почти всегда в настройках нового окружения сайта: кодировка базы данных, параметры веб-сервера или обработчик на стороне сайта, который стал интерпретировать UTF-8 как windows-1251. Проверяйте цепочку на стороне сайта, а не в 1С.