Как определить кодировку dbf файла
Как работать с кодировкой dbf файла? - Алексей Лукин aka Arcon
DBF-файлы весьма распространены в государственном секторе. Их активно используют для переноса данных из одной базы данных в другую. Все, казалось бы, хорошо, но есть один неприятный момент. Какой? Кодировка!
Как часто приходится ломать голову из-за этих кодировок. Но ничего не поделаешь, приходится с этой неприятностью как-то справляться. Итак, что же нам делать, если мы делаем свое приложение, для работы с dbf файлом и возникли трудности с кодировкой?
В dbf файле за кодовую страницу отвечает 29-й байт. Например, значение 101 означает кодовую страницу DOS-866, 201 - Windows-1251, а значение 0 указывает, что нужно использовать системные настройки. Зная это, можно умело манипулировать кодировкой при импорте и экспорте dbf. Выставить нужную кодировку при создании файла или если кодировка содержимого не соответствует кодировке кодовой страницы, то мы легко можем менять последнюю путем записи нужного числа в 29 байт. Приведенный ниже код это демонстрирует.
FileStream fs = new FileStream(path, FileMode.Open); fs.Seek(29, SeekOrigin.Begin); fs.WriteByte(201); fs.Close();
Примерно таким образом мы можем и считать байт и привести его к числу, для удобства, чтобы знать, какая кодовая страница у файла.
Все, казалось бы, хорошо, вот только при подключении через Microsoft Jet Database Engine, упорно игнорируется кодовая страница. Кодировка берется из реестра, параметр DataCodePage. Найти этот параметр можно в следующих ветках реестра:
- 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.0\Engines\Xbase'
- 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Xbase'
- 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase'
Если при чтении dbf мы можем конвертировать данные непосредственно в нашем приложении, то при экспорте без манипуляции со значением параметра DataCodePage никак не обойтись. По сути нам надо запомнить, что при значении "OEM" работа проходит при DOS кодировке, а при значении "ANSI" - в Windows. Если всегда экспорт должен проходить в одной кодировке, то можно сразу один раз ее выставить и забыть. Иначе нам придется перед каждой операцией менять значение реестра. Но таким образом наши пользователи всегда будут получать данные в понятном и нужном им виде.
Определения типа DBF файла и его кодировки
← →icebeerg © (2004-10-20 18:14) [0]
Можно ли и если можно, то как по заголовку DBF файла определить тип таблицы - dBaseIII+ или dBaseIV или dBaseV и кодировку текста хранимого в таблице cp1251(win/ansi) или cp866(dos/oem)?
← →
Holy © (2004-10-21 09:28) [1]
http://delphi.aiq.ru/stati/24.htm
http://articles.org.ru/docum/dbfall.php
Может отсюда что поможет?
← →
icebeerg © (2004-10-21 10:17) [2]
>Holy © (21.10.04 09:28) [1]
Структу заголовка файла я знаю, мне нужно собственно сабж.
Есть идея по определению кодировки, как сформулирую выдвину на обсуждение.
← →
icebeerg © (2004-10-21 10:25) [3]
Отделное большое спасибо sigetta за письмецо.
Про кодировку вопрос снят.
dbf и кодировка
← →stas © (2008-10-10 11:17) [0]
Добрый день! :)
Вопрос следующий. Есть dbf файлик, нужно его проекспортировать к себе в базу. Для этого открываю его с помощью ADO+JET, пробовал и ADO+ODBC+dBASE. И вместо русских букв рисуются иероглифы. При этом просмотром по F3 в Total Comander русские буквы отображаются правильно.
И BDE открывает правильно (но BDE не желательно использовать).
Пытался менять кодовую страницу (29 байт) изначально он равнялся 03, менял на 57 и 26 - меняются только иероглифы.
Также менял ее с помощью DataBase Desctop - тоже не помогло.
Подскажите в чем может быть проблема.
← →
Правильный$Вася (2008-10-10 11:20) [1]
кодировку нужно указывать при подключении, а не шаманскими действиями с заголовками файла
тотал для просмотра не подходит, т.к. он сам на лету перекодирует
смотри HEX-редактором
← →
Сергей М. © (2008-10-10 11:20) [2]
> BDE открывает правильно
Какой LANGDRIVER при этом фигурирует в настройках БДЕ ?
← →
stas © (2008-10-10 11:23) [3]
Сергей М. © (10.10.08 11:20) [2]
"ascii" ANSI
Правильный$Вася (10.10.08 11:20) [1]
Hex тоже правильно отображает.
А где указать кодировку при подключении?
← →
Сергей М. © (2008-10-10 11:31) [4]
А Database Desktop показывает содержимое таблицы в нормальном виде ?
← →
stas © (2008-10-10 11:33) [5]
Сергей М. © (10.10.08 11:31) [4]
нет тоже иероглифы.
← →
Сергей М. © (2008-10-10 12:15) [6]
> тоже иероглифы
Так ведь DBD использует как раз BDE, при этом ты утверждаешь, что
> BDE открывает правильно
Как понимать тебя, Саид ?)
← →
clickmaker © (2008-10-10 12:17) [7]
> [3] stas © (10.10.08 11:23)
> Сергей М. © (10.10.08 11:20) [2]
> "ascii" ANSI
попробуй pdox ansi cyr или какую-нибудь 866
← →
Сергей М. © (2008-10-10 12:28) [8]
> clickmaker © (10.10.08 12:17) [7]
При 866-й кодировке в dbf"е вроде бы должно быть $65 , а не $03 ..
← →
stas © (2008-10-10 13:07) [9]
clickmaker © (10.10.08 12:17) [7]
а где ее установить?
Сергей М. © (10.10.08 12:15) [6]
незнаю :), но это факт только что еще раз проверил.
← →
Сергей М. © (2008-10-10 13:38) [10]
> stas © (10.10.08 13:07) [9]
Не знаю что ты там проверял, но факт остается фактом - DBD и твое приложение используют разные языковые драйверы BDE.
← →
oldman © (2008-10-10 13:39) [11]
> stas © (10.10.08 11:17)
> Вопрос следующий. Есть dbf файлик
Чем был создан тот файлик - государственная тайна?
У DBase и FoxPro разные файлы.
← →
stas © (2008-10-10 13:51) [12]
oldman © (10.10.08 13:39) [11]
Я незнаю. получаем его по клиент-банку, но если это поможет могу узнать у банка.
← →
stas © (2008-10-10 13:53) [13]
Сергей М. © (10.10.08 13:38) [10]
Как это можно проверить. в bde администраторе на всех драйверах установлена кодировка "ascii" ANSI.
oldman © (10.10.08 13:39) [11]
Можно по заголовку определить чем создан?
← →
stas © (2008-10-10 14:29) [14]
На одном компе из 4-х открылся с 29 байтом равным 57.
Интересно то, что компы одинаковые и системы с ПО установлены из одного образа...
Мож конечно туда что-то доставлялось,хотя непомню.
← →
Сергей М. © (2008-10-10 14:34) [15]
> Как это можно проверить
Создать алиас, явно настроить его на использование dBASE или FoxPro-драйвера.
Через этот самый конкретный алиас открывать и у себя программно и в DBD.
Наблюдать разницу.
← →
Anatoly Podgoretsky © (2008-10-10 15:40) [16]
> stas © (10.10.08 11:23) [3]
> Сергей М. © (10.10.08 11:20) [2]
> "ascii" ANSI
Это означает, что кодировка у данной таблицы отсутствует, какая есть на машине (Win) та и используется для работы.
> Можно по заголовку определить чем создан?
Зачем гадать? Надо узнать у создателя.
← →
stas © (2008-10-10 17:15) [17]
Anatoly Podgoretsky © (10.10.08 15:40) [16]
Они не знают :). На мой вопрос чем пользуются ответили что незнают 0_O
Потом перезвонила девушка и зачем-то уточнила какой у нас процессор 0_O.
Вобщем всем спасибо разобрались stas © (10.10.08 14:29) [14].
← →
Сергей М. © (2008-10-10 19:34) [18]
> На мой вопрос чем пользуются ответили что незнают
Зашибись у вас отношения - одни не знают что сделали, другие не знают что с этим сделанным дальше делать)
GIS-Lab: Изменение кодировки DBF файла
Описание использования библиотеки dbfpy для изменения кодировки данных и скрипт.
Неотъемлемой частью данных в формате shape является атрибутивная таблица в формате DBF. Атрибутивные данные могут храниться в разных кодировках, часто встречаются такие кодировки как Windows-1251 (CP1251) и UTF8, KOI8-R. Некоторое, особенно относительно давно появившиеся ГИС, такие как Arcview GIS 3.x, некоторые версии Mapinfo, не умеют работать с более новой кодировкой UTF8. Соответственно, часто встречается задача перевода DBF из одной кодировки в другую.
Для преобразования dbf из одной кодировки в другую можно использовать скрипт на языке Python (скачать скрипт). Эта статья описывает подготовку к работе, идею скрипта и как с ним работать.
[править] Подготовка к работе
Для работы скрипта необходимо иметь Python 2.5/2.6 и один раз скачать и установить библиотеку dbfpy. После загрузки библиотеки нужно выполнить:
python setup.py install
Правильность установки библиотеки можно проверить запустив Python и выполнив:
Если все установлено нормально, ошибок эта команда выдать не должна.
[править] Идея
В процессе работы, наш скрипт должен построчно проверять тип поля в исходном файле DBF и, если он строковый, т.е. есть вероятность того, что данные не в той кодировке, что нужно, осуществлять преобразование. Упрощенная версия скрипта на языке Python для перевода данных из кодировки в кодироввку выглядит следующим образом:
#!/usr/bin/python #--*-- encoding: utf-8 --*-- import sys from dbfpy import dbf from types import * db = dbf.Dbf(sys.argv[1]) newDB=dbf.Dbf(sys.argv[2], new=True) for f in db.header.fields: newDB.addField(f) for rec in db: r=newDB.newRecord() newData=[] for f in rec.fieldData: if type(f)==StringType: f=unicode(f,'utf-8') f=f.encode('windows-1251') newData.append(f) r.fieldData=newData r.store() db.close() newDB.close()
[править] Использование
Утилита вызывается из командной строки и принимает несколько параметров:
python dbf-encode.py -f encin -t encout -n input output
- input — имя исходного файла dbf, который требуется преобразовать, обязателен
- output — имя конечного файла dbf, куда будет записан результат, обязателен
- -f (--from-code) — кодировка исходного DBF файла, не обязателен, по умолчанию UTF-8
- -t (--to-code) — кодировка выходного DBF файла, не обязателен, по умолчанию CP-1251
- -n (--no-subs) — переключатель, если установлен, то неизвестные символы пропускаются, если не установлен — заменяются на знаки вопроса («?»)
- -h (--help) — справка
- -v (--version) — версия программы
[править] Пример использования
Конвертировать adygeya-admin-a.dbf в adygeya-admin-a2.dbf из кодировки UTF-8 в кодировку CP-1251.
python dbf-encode.py -f UTF8 -t CP1251 adygeya-admin-a.dbf adygeya-admin-a2.dbf
или упрощенная запись параметров командной строки (эти кодировки и так являются кодировками на входе и выходе по умолчанию):
python dbf-encode.py adygeya-admin-a.dbf adygeya-admin-a2.dbf
[править] Ошибки конвертации
Если конвертер сталкивается с символом, который не может перекодировать, он по-умолчанию заменяет его на вопросительный знак («?»), если к строке запуска добавлен --no-subs (-n), то символ пропускается.
Если возникает другая ошибка при конвертации, конвертер выводит содержание записи на которой возникла ошибка в консоль и прекращает работу. Конечный файл создается неполным и для подмены оригинального в shape-файле непригоден.
Ошибка invalid syntax может быть связана с неправильным запуском скрипта, под Windows запуск нужно осуществлять из командного процессора («Пуск → Выполнить → cmd») после чего вводить команду указанную выше.
Скачать полную версию dbf-encode.py
[править] Ссылки по теме
Нет отображаются русские буквы в DBFshow?
Если вместо русских букв в Вашем файле отображается нечто иное и непонятное, то можно попробовать следующие варианты:
1. Нужно поменять кодировку файла. В заголовке таблицы в 29 байте хранится информация о кодировке DBF файла. DBFShow на основании этого байт использует ту или иную кодировку. Заходим в меню «Разное\Кодировка» и пробуем выбрать другую кодировку. Для русского текста это либо 1251 — Russian Windows, либо 866-Russian OEM
Меняем кодировку, смотрим на результат. Естественно файл должен быть доступен для записи. Буквы RW внизу экрана. Получаем русские буквы.
Также в программе есть возможность автоматически проставлять код кодировки при открытии файлов DBF, если у файла значение кодировки равно 0. Для этого заходим в опции DBFSHow, ставим галочку на «Использовать кодировку по умолчанию», выбираем необходимую кодировку и программа будет исправлять значение кодировки при открытии файлов.
2. Если русские буквы не отображаются в названиях колонок, как например при выгрузке из Excel, то необходимо поставить галочку в пункте «Кодировка для русских колонок (из Excel)», (рисунок выше) выбрать необходимую кодировку и заново открыть файл.
Другие разделы FAQ, которые могут быть вам интересны:
Как и чем открывать DBF-файл
DBF — это формат хранения данных, использующийся системами управления базами данных. Он появился ещё в 1980 году и в настоящее время является всё менее используемым. Тем не менее он применяется во многих бизнес и специализированных приложениях, например, в продуктах 1С, программах проектирования, инженерных приложениях. При работе с такими программами часто необходимо редактировать файл, имеющий формат DBF.
Особенности работы с DBF-файлами в Windows.
По умолчанию в Windows с ним не сопоставлено программ. До 2007 года была возможность работать с DBF в Excel, но в настоящее время его можно открыть как простую таблицу, но не сохранить в качестве DataBaseFile.
Файл, имеющий расширение DBF, состоит из следующих частей:
- служебная (заголовок) — наименование файла, количество и структура записей;
- информационная — массив данных, состоящий из последовательных записей.
DBF используются при работе с большими массивами информации, взаимосвязанными между собой. Каждой записи присваивается уникальный ключ, создаётся структура взаимосвязи. Как упрощённый пример, можно привести каталог товаров, где у каждого наименования есть признак, например цвет или материал. А у каждого материала или цвета есть свои характеристики, например цена, срок службы, дисконт. И таким образом, получается связанная система многоуровневых информационных баз.
Расширение DBF у файла говорит, что это служебные данные, которые впоследствии обрабатываются какой-то программой. Сами по себе для обычных пользователей компьютера они редко представляют интерес. Но если вы осваиваете некоторое специализированное приложение, вам может понадобиться знать, как и чем открыть DBF-файл, чтобы его отредактировать.
С файлом DBF может находиться документ, имеющий расширение DBT или FPT. Это заметки к базе данных, что представляют собой текстовый документ, открывающийся в среде вместе с основным файлом.
Программы, работающие с DBF
Поскольку, как было сказано ранее, в Windows не определено сопоставление DBF конкретной программе, чтобы его открыть, необходимо:
- Скачать специальное ПО. Выберите из многообразия программ то, что больше всего отвечает вашим целям.
- Установить программу на компьютер.
- В настройках программы поставить ассоциацию с файлами, имеющими расширение DBF, если это не было сделано автоматически в ходе установки.
Существуют два разных типа программ, что могут открыть формат DBF: средства программистов, которые на основании обработки баз создают утилиты для конечных пользователей, и программы для потребителей, работающих с базами данных на «бытовом» уровне.
Файл, имеющий формат DBF, можно открыть следующими программами.
Microsoft Access
Microsoft Access — система управления базами данных для обычных пользователей. Обладает удобным интерфейсом, простотой в управлении. Основными объектами Access являются:
- таблицы;
- запросы;
- формы;
- отчёты;
- макросы и модули;
- схема.
И также имеется встроенный язык программирования, расширяющий возможности приложения.
Visual FoxPro
Visual FoxPro — мощный инструмент, визуальная среда для создания СУБД от компании Майкрософт. Включает всё, что нужно для управления информацией:
- средства упорядочивания таблиц;
- средства обработки запросов;
- возможности создания интегрированных СУБД;
- инструменты разработки пользовательских приложений.
DBFView
DBFView — простой, но мощный инструмент открытия, редактирования, просмотра и печати. Поддерживает форматы DBF: dBase, Clipper, FoxPro, Visual FoxPro и многие другие. С помощью этого приложения можно добавлять, переименовывать, удалять, сортировать, упаковывать и просматривать записи, экспортировать в TXT и HTML, импортировать и экспортировать в Excel, а также конвертировать формат DBF в CSV и XLS-файлы.
DBF Viewer Plus
DBF Viewer Plus — не требующий установки простой редактор для работы с разными форматами DBF, включая dBase, Clipper, Foxpro. Позволяет открывать, просматривать данные, отфильтровывать записи, печать и предпросмотр таблиц, редактировать, добавлять и удалять записи, осуществлять расширенный поиск, создавать файлы, выполнять экспорт документов в форматы CSV, PDF, XLS, RTF, WKS, XML, HTML.
DBF Commander Professional
DBF Commander Professional — профессиональное средство редактирования и просмотра с поддержкой SQL-запросов.
Этот инструмент позволяет:
- просматривать, создавать, редактировать, печатать DataBaseFile;
- просматривать, редактировать и печатать структуру;
- изменять кодировку;
- поиск и замена с учётом регистра и частичными вхождениями;
- экспорт в CSV, XLS, XML, HTML;
- импорт из XML и CSV;
- фильтрация записей и множественная сортировка;
- подсчёт статистики;
- работа с SQL;
- поддержка командной строки и многие другие функции.
Таковы некоторые средства работы с файлами, имеющими формат DBF. Если вам нужно просто просмотреть содержимое, то скачайте одну из простых утилит с удобным интерфейсом. Если же планируете заниматься программированием и разработкой в среде управления базами данных, то приобретите профессиональный программный пакет с широким функционалом.
DBF Encoding - Кодовые страницы, поддерживаемые DBF Commander
Кодовая страница файла DBF может принимать одно из следующих значений:
Кодировки Windows:
- 874 Тайский Windows
- 932 Японская Windows
- 936 Китайский (КНР, Сингапур) Windows
- 949 Корейская Windows
- 950 Китайский (САР Гонконг, Тайвань) Windows
- 1250 Восточноевропейская Windows
- 1251 Русская Windows
- 1252 Окна ANSI
- 1253 Греческая Windows
- 1254 Турецкая Windows
- 1255 Еврейский Windows
- 1256 Арабский Windows
Кодировки MS-DOS:
- 437 Ед.С. MS-DOS
- 620 Мазовецкое воеводство (польское) MS-DOS
- 737 Греческий MS-DOS (437G)
- 850 Международный MS-DOS
- 852 Восточноевропейская MS-DOS
- 857 Турецкий MS-DOS
- 861 Исландский MS-DOS
- 865 Скандинавский MS-DOS
- 866 Русский MS-DOS
- 895 Каменицкий (Чешский) MS-DOS
Чтобы установить новую кодовую страницу для файла DBF , используйте команду «Установить кодовую страницу».
Вы также можете преобразовать файл DBF в кодировку UTF-8 (и наоборот, преобразовать файл UTF-8 DBF в файл ANSI DBF ).
.
r - Как открыть файл dbf в UTF-8
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- Реклама Обратитесь к разработчикам и технологам со всего мира
- О компании
Загрузка…
java - Как определить кодировку символов в файле?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
Расширение файла | .dbf |
Категория файла | документы |
Описание | Dbase, программное обеспечение для управления базами данных, использует расширение DBF для хранения своих стандартных файлов базы данных.Однако dbase - не единственная программа для работы с базами данных, совместимая с файлами DBF, поскольку другие программы «xBASE» также поддерживают этот формат файла. DBF приобрел популярность, потому что его структура проста для понимания, а также ранее была принята сообществом баз данных. |
Технические характеристики | DBF-файл содержит несколько наборов данных, которые хранятся и организованы в массивы. Он используется в dBASE II как формат файла.Кроме того, он использовался в следующих версиях dBASE III, III + и IV. DBF-файл - один из самых ранних файлов базы данных, имеющих заголовок. Заголовок делает программу незнакомой со структурой данных прочитанного DBF файла. Однако его можно использовать в Microsoft Excel OpenOffice Calc и некоторых других программах. |
Программы | Microsoft Access 2016 Microsoft Excel 2016 Microsoft Visual FoxPro Corel Quattro Pro X7 Apache OpenOffice HiBase Group DBF Viewer 2000 Astersoft DBF Manager Просмотрщик DBF Plus DBFView Закон о Swiftpage! Alpha Программное обеспечение Alpha Anywhere Planamesa NeoOffice (Mac) GTK DBF редактор (Mac и Linux) мультисофт FlagShip (Linux) |
Основная программа | дБase |
Разработчик | дБASE |
Тип MIME | приложение / база данных Приложение/ x-dbase приложение / dbf Приложение/ x-dbf zz-приложение / zz-winassoc-dbf |
Как определить кодировку файла в Mac OS из командной строки
Вы можете определить кодировку файлов и набор символов через командную строку в Mac OS (и Linux) с помощью команды «файл», которая помогает получить общую и конкретную информацию о типе файла.
Это, вероятно, не будет уместным советом для многих пользователей, но если вам необходимо работать с определенным набором символов для чего-то или нужно знать, какой тип файла, кодировка или набор символов введенного элемента способ командной строки, то это поможет.
Команда file работает в Mac OS и Mac OS X, а также в Linux и многих других вариантах UNIX, что делает этот трюк полезным для скриптов и других подобных целей.
Определение кодировки файла и набора символов через командную строку в Mac OS
Базовый синтаксис выглядит следующим образом:
файл -I (входной файл)
(если это не было очевидно, это заглавная буква «i» в качестве флага в -I, а не строчная L)
Нажатие возврата с правильным именем файла в качестве входных данных покажет набор символов, например UTF-8, us-ascii, binary, 8bit и т. Д.
Например, предположим, что мы проверяем набор символов и кодировку файла с именем «text.txt», тогда синтаксис будет выглядеть следующим образом:
$ файл -I text.txt
text.txt: text / plain; charset = unknown-8bit
Где «text / plain» - тип файла, а «unknown-8bit» - кодировка файла набора символов.
Вы также можете выполнить команду file буквально для любого другого файла, будь то изображения, архивы, исполняемые файлы или что-нибудь еще, на что вы хотите указать команду.Это может быть удобно, если вы автоматизируете что-то, чтобы определить тип файла для последующего запуска соответствующей команды, возможно, после того, как файл был загружен с помощью curl, и тип архива необходимо определить перед выполнением правильной команды.
$ файл -I DownloadedFile.zip
DownloadedFile.zip: application / zip; charset = двоичный
Есть много других применений для проверки набора символов, кодировки файла и типа файла через командную строку с помощью команды «файл», а флаг -I - лишь одна из множества доступных опций.Просмотрите страницу руководства для файла, чтобы узнать больше, если вы заинтересованы, и не забудьте ознакомиться с нашими многими другими советами по работе с командной строкой (или перечислить все команды терминала, доступные на Mac, и немного повеселиться).
Знаете ли вы другой или лучший способ проверить кодировку файла и набор символов через командную строку в Mac OS? Дайте нам знать об этом в комментариях!