Открытая таблица вместо названий товара показывает набор посторонних знаков. Причина в том, что кодировка DBF, в которой написан текст, не совпала с той, по которой его читает программа. Файл при этом цел, и текст можно вернуть.

Откуда в таблице знаки вместо русских букв

В DBF нет единой кодировки. Каждая программа-источник пишет русские буквы байтами по своим правилам, а читающая программа должна угадать, по каким. Один и тот же файл в разных программах открывается по-разному: где-то названия товара видны, где-то на их месте бессмысленные символы. Значит, читающая программа ошиблась в догадке, а байты файла целы.

Какая кодировка нужна, обычно отмечено в самом файле. В его заголовке, в байте со смещением 29 (счёт с нуля), стоит номер кодовой страницы. Для DOS это 0x26 или 0x65, кодировка cp866. Для Windows это 0xC9, кодировка cp1251. Если там 0x00, метки нет, потому что программа-источник её не поставила, и читающей программе остаётся угадывать. Неверная догадка и даёт знаки вместо букв.

Достаточно перечитать файл в правильной кодировке, и текст на месте.

Как узнать кодировку своего файла

Сначала посмотрите на метку в заголовке. Если она есть, ответ готов: 0x26 и 0x65 означают DOS, cp866, а 0xC9 — Windows, cp1251. Где лежит этот байт и как устроен заголовок, разобрано в описании формата DBF. Соответствие номеров страниц и кодировок описано в справке Visual FoxPro и в разборщике dbfread.

Если метки нет, подбирайте кодировку DBF по виду текста. Начните с той, что уже выбрана: если буквы читаются, менять нечего. Если на экране мусор, переключитесь на другую из двух и взгляните ещё раз. Одной-двух попыток хватает, потому что русских кодировок у DBF две, и выглядят они так:

Что видно на экранеЧто на самом деле
╤тхЁыю яю ьхЄрыыєфайл записан в Windows, cp1251, но открыт как DOS
‘ўҐа«® Ї® ¬Ґв ««гфайл записан в DOS, cp866, но открыт как Windows

Как получить читаемую таблицу

Задача простая: перечитать файл в той кодировке, в которой он записан. Все шаги делаются на странице просмотра и правки.

  1. Сохраните копию исходного файла до любых правок, чтобы вернуться к нему при ошибке.
  2. Откройте файл и попробуйте кодировку, отмеченную в заголовке, или ту, что выбрана по умолчанию.
  3. Если вместо букв знаки, переключитесь на другую кодировку в списке. Таблица перечитается целиком с нуля, поэтому проверьте глазами несколько строк.
  4. Правьте ячейки и сохраняйте результат, когда текст читается.

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

Что выбрать при сохранении DBF — DOS или Windows

Выбирайте то, что ждёт принимающая программа. Если файл уходит обратно в учётную систему, спросите у того, кто его просит: он знает, какая кодировка там принята. Старые учётные программы обычно ждут DOS, cp866, новые работают с Windows, cp1251.

Если спросить не у кого, ориентируйтесь на возраст программы-получателя. Файлы с нашего сайта собираются с меткой в заголовке, 0x26 для DOS и 0xC9 для Windows, чтобы принимающая программа не гадала.

Дальше файл можно отправить в Excel или CSV. На странице перевода в книгу Excel и на странице перевода в CSV кодировка уже не подводит: в книге XLSX внутри всегда UTF-8, а CSV уходит с меткой кодировки в начале, и Excel открывает его сразу.

Нашли ошибку?