Открытая таблица вместо названий товара показывает набор посторонних знаков. Причина в том, что кодировка 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 |
Как получить читаемую таблицу
Задача простая: перечитать файл в той кодировке, в которой он записан. Все шаги делаются на странице просмотра и правки.
- Сохраните копию исходного файла до любых правок, чтобы вернуться к нему при ошибке.
- Откройте файл и попробуйте кодировку, отмеченную в заголовке, или ту, что выбрана по умолчанию.
- Если вместо букв знаки, переключитесь на другую кодировку в списке. Таблица перечитается целиком с нуля, поэтому проверьте глазами несколько строк.
- Правьте ячейки и сохраняйте результат, когда текст читается.
Цифры и даты при смене кодировки не портятся. Цифры, точка, минус и пробел занимают одни и те же места в обеих кодовых страницах, поэтому ломаются только русские буквы, а суммы и даты читаются как читались.
Что выбрать при сохранении DBF — DOS или Windows
Выбирайте то, что ждёт принимающая программа. Если файл уходит обратно в учётную систему, спросите у того, кто его просит: он знает, какая кодировка там принята. Старые учётные программы обычно ждут DOS, cp866, новые работают с Windows, cp1251.
Если спросить не у кого, ориентируйтесь на возраст программы-получателя. Файлы с нашего сайта собираются с меткой в заголовке, 0x26 для DOS и 0xC9 для Windows, чтобы принимающая программа не гадала.
Дальше файл можно отправить в Excel или CSV. На странице перевода в книгу Excel и на странице перевода в CSV кодировка уже не подводит: в книге XLSX внутри всегда UTF-8, а CSV уходит с меткой кодировки в начале, и Excel открывает его сразу.