DBF открылся кракозябрами вместо русских букв: как прочитать таблицу

Выгрузка из старой учётной программы открылась в Excel, а русские буквы превратились в мешанину из ç, ■ и й. Файл не испорчен: таблица цела, просто текст записан в другой кодировке, и просмотрщик читает её не той таблицей символов.

Почему вместо русских букв знаки

Одинаковые байты в разных кодировках означают разные знаки. Старые учётные и складские программы под DOS писали по-русски в кодировке 866, а Windows-просмотрщик по умолчанию читает байты как 1251. Одни и те же буквы превращаются в бессмысленный набор символов, сами данные при этом на месте.

Номер кодовой страницы лежит в заголовке файла, в байте 29, его состав описан в документации Visual FoxPro). Для 866 там стоит метка 0x65, для 1251 — 0xC9. Проблема в том, что этот байт заполняют не все программы. Тогда просмотрщик угадывает кодировку сам и часто ошибается. Лечение простое: переключить кодировку вручную, и таблица перечитается нормальными буквами.

Чем открыть таблицу и что не умеет Excel

Excel файлы dBase III и IV открывает, но сохранить книгу обратно в DBF не может — это написано в справке Microsoft. dBase II в списке поддерживаемых форматов вообще не значится. Поэтому, если таблицу потом нужно отдать обратно в учётную программу, пересохранять её через Excel нельзя: на выходе будет файл другого формата.

Посмотреть таблицу и сменить кодировку можно прямо в браузере, если открыть DBF файл. В списке кодировок вы выбираете нужную, и таблица перечитывается на лету.

Что не видно даже при верной кодировке

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

  • Поля memo хранят длинный текст в отдельном файле рядом с таблицей. В самой записи лежит только номер блока, и без соседнего файла текста нет.
  • Запись с пометкой удаления физически остаётся в файле. Вычищают такие записи в самой учётной программе.
  • Состав полей меняют не в просмотрщике: столбец не добавить и не переименовать.

Прежде чем считать файл испорченным, проверьте две вещи. Переключите кодировку вручную и убедитесь, что рядом с таблицей лежит файл с полями memo.