1. Главная
  2. Ошибки в XML-УПД
  3. Кодировка windows-1251 в XML-УПД: почему непонятные символы и как исправить

Кодировка windows-1251 в XML-УПД: почему непонятные символы и как исправить

Почему XML-УПД открывается с непонятными символами или не принимается в ЭДО, какая кодировка нужна по формату и как пересохранить файл в windows-1251.

Вы открываете XML-файл УПД, а вместо «Номер» видите «РќРѕРјРµСЂ». Или УПД XML не открывается вовсе: браузер ругается на ошибку разбора, а оператор ЭДО пишет, что файл повреждён. В большинстве таких случаев виновата кодировка. Разберём, какая кодировка нужна XML-УПД, как её проверить и как исправить файл, не испортив его окончательно.

Проблемы с кодировкой — одни из самых коварных среди тех, что входят в частые ошибки в XML-файле УПД: внешне документ может выглядеть почти нормально, а система его не принимает.

Какая кодировка нужна XML-УПД

XML-файлы УПД формата 5.03 формируются в кодировке windows-1251. Это прописано в первой строке документа:

<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="ON_NSCHFDOPPR_..." ВерсФорм="5.03" ВерсПрог="...">

Заголовок encoding — это обещание: «байты этого файла нужно читать как windows-1251». Программа, открывающая файл, верит заголовку. Если реальные байты записаны в другой кодировке, например в UTF-8, русские буквы превращаются в мусор, а строгий XML-парсер может отказаться читать файл вообще.

Поэтому важно не просто «сохранить в windows-1251», а чтобы совпадали две вещи: фактическая кодировка байтов и значение в заголовке.

Почему не UTF-8

UTF-8 — более современная и универсальная кодировка, и многие редакторы используют её по умолчанию. Но формат УПД исторически опирается на windows-1251, и учётные программы, и операторы ЭДО ждут именно её. Кодировка, отличная от предусмотренной форматом, — риск отказа при загрузке, даже если сам XML корректен.

Ограничение у windows-1251 одно: это однобайтовая кодировка с набором из 256 символов. Кириллица, латиница, цифры и основная пунктуация в ней есть, а вот многих специальных знаков нет.

СимволЕсть в windows-1251Что делать
Русские и латинские буквы, цифрыДаНичего
«Ёлочки», длинное тире, №, €ДаМожно оставить
Знак рубля ₽НетПисать «руб.»
Эмодзи, иероглифыНетУдалить из наименований
Буквы с диакритикой (ą, ș, ğ)ЧастичноЗаменить на латиницу без знаков

Признаки проблемы с кодировкой

Что вы видитеЧто, скорее всего, произошло
«РќРѕРјРµСЂ», «РћРћРћ» вместо русских буквФайл в UTF-8, а читается как windows-1251
«Íîìåð», «ÎÎλФайл в windows-1251, а читается как другая однобайтовая кодировка
Ромбики с вопросом «�»Файл в windows-1251, а читается как UTF-8
Браузер: ошибка XML, invalid byte, encoding errorБайты не соответствуют заголовку
Оператор ЭДО: файл не читается или повреждёнТо же, или файл обрезан при передаче
Вопросительные знаки «???» вместо части символовСимволов нет в windows-1251, они потеряны при сохранении

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

Иногда файл открывается нормально у вас, но не у контрагента. Это значит, что ваш редактор угадал кодировку правильно, а его программа доверилась заголовку.

Откуда берётся проблема

  • Файл открыли и сохранили в редакторе, который по умолчанию пишет UTF-8. Заголовок остался прежним, а байты поменялись.
  • Файл собрали скриптом или выгрузкой, где кодировка вывода не задана явно.
  • Текст скопировали из Word, сайта или мессенджера: туда попали «ёлочки», длинные тире, символы валют, эмодзи. Часть из них в windows-1251 есть, часть нет, и при сохранении они превращаются в «?».
  • Файл прошёл через почту или облако, которое пересохранило его как текст.

Как проверить кодировку файла

Способ 1. Посмотреть заголовок. Откройте файл в любом редакторе и прочитайте первую строку. Там должно быть encoding="windows-1251".

Способ 2. Посмотреть фактическую кодировку. В Notepad++ она показана в строке состояния внизу окна и в меню «Кодировки». В VS Code — в правом нижнем углу. Если там написано UTF-8, а в заголовке windows-1251, вы нашли проблему.

Способ 3. Открыть в браузере. Перетащите XML в окно браузера. Если файл корректен, вы увидите дерево с нормальным русским текстом. Ошибка разбора или «кракозябры» — повод разбираться дальше.

Способ 4. Перевести в таблицу. Если нужно не столько починить файл, сколько прочитать, что в нём, удобно перевести УПД из XML в Excel: сервис прочитает документ и разложит реквизиты и строки товаров по листам. Если файл прочитать не удаётся, это тоже диагноз.

Как исправить в блокноте и редакторе

Прежде всего сделайте копию исходного файла и работайте с ней.

Notepad++

  1. Откройте файл.
  2. Если текст читается нормально, но кодировка в строке состояния — UTF-8, выберите в меню кодировок преобразование в windows-1251 (кириллица). Важно именно преобразовать, а не просто «переключить отображение».
  3. Если текст — «кракозябры», сначала выберите правильную кодировку для отображения (UTF-8), убедитесь, что текст стал читаемым, и только потом преобразуйте в windows-1251.
  4. Проверьте первую строку: encoding="windows-1251".
  5. Сохраните. Имя файла не меняйте.

VS Code

  1. Нажмите на название кодировки в правом нижнем углу.
  2. Выберите «Reopen with Encoding» и укажите кодировку, в которой текст читается.
  3. Снова нажмите на кодировку, выберите «Save with Encoding» и Windows 1251.
  4. Проверьте заголовок и сохраните.

Стандартный Блокнот Windows

В новых версиях Блокнота кодировку можно выбрать в окне «Сохранить как», но вариант windows-1251 там обычно назван «ANSI» и зависит от региональных настроек системы. Для XML-УПД это ненадёжный инструмент: лучше использовать Notepad++ или VS Code.

Нестандартный заголовок

Иногда байты в порядке, а заголовок записан иначе: encoding="cp1251", encoding="Windows-1251" или его нет вовсе (тогда парсер по умолчанию считает файл UTF-8). Приведите первую строку к виду <?xml version="1.0" encoding="windows-1251"?>, сохранив кодировку байтов.

Если символы уже потеряны

Если в файле стоят «???» вместо части текста, преобразование не поможет: информация утеряна. Восстановите текст вручную или, что надёжнее, сформируйте документ заново из исходных данных.

После любой правки проверьте две вещи: что имя файла осталось равным ИдФайл (об этом — статья Имя файла не соответствует ИдФайл: причины и исправление) и что файл проходит схему ФНС.

Как не допускать: генерация файла сервисом

Проблемы с кодировкой почти всегда появляются при ручной работе с XML. Чтобы их не было:

  • не открывайте XML-УПД на редактирование без необходимости, только на чтение;
  • если правка нужна, используйте редактор, где кодировка видна и задаётся явно;
  • не вставляйте в наименования товаров символы из Word и с сайтов: эмодзи, экзотические кавычки, знаки валют;
  • формируйте файл инструментом, который пишет windows-1251 сам.

Наш конвертер сохраняет XML в windows-1251 с правильным заголовком и сразу называет его по ИдФайл. Если нужно изменить готовый документ, переведите его в таблицу, поправьте и соберите обратно: кодировка при этом не пострадает.

Если кодировка в порядке, а файл всё равно не принимают, посмотрите, как исправить ошибки УПД других типов: имя файла, схема, реквизиты, коды маркировки. А чтобы с самого начала получать корректный файл, используйте конвертер УПД Excel в XML.