Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

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


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 из кодировки OEM в кодировку ANSI

Всем привет дорогие друзья. Столкнулся с такой проблемой, что файл формата DBF имеет кодировку OEM, соответственно, когда его открываю, то русские буквы отображаются корректно (если открывать через DBF-редактор), но как только я ставлю кодировку ANSI, то русские буквы превращаются в иероглифы. Кодировка ANSI мне нужна, чтобы загрузить файл в свой проект, так как он не может отобразить данные в кодировке OEM.

Простыми словами, мне необходимо переконвертировать DBF-файл в кодировке OEM в кодировку ANSI. Решение я нашел достаточно быстро. Вот какой у меня имеется файл на данный момент:

То есть, кодировка OEM – русские символы отображаются. Как Вы помните, мне необходимо кодировка ANSI, соответственно я ее устанавливаю и смотрим, что из этого получилось:

Все русские буквы превратились в иероглифы. В итоге, если я загружу в проект в таком виде, то будет иероглифами он отображаться, а если в кодировке OEM, то тоже будет отображаться иероглифами.

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

Ждем окончания процесса и открываем готовый файл, после чего смотрим нашу кодировку и как отображаются символы в самом редакторе:

То есть, мы получили необходимый эффект: кодировка ANSI и русские буквы отображаются, как положено. Можно скачать, что с задачей мы справились на 100%. Да и еще, не забудьте прочитать также статью, как можно перекодировать кириллицу в UTF-8.

Также советуем почитать на PressDev.RU

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 ).

.

foxpro - Проблемы с кодировкой в ​​таблице DBF

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

utf 8 - кодировка файла DBeaver (cp1250 - Windows-1250) - изменить кодировку по умолчанию?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

python - DBF - кодировка cp1250

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

c # - DotSpatial - Как правильно сохранить турецкие символы (например, 'ə' 'ü' и т.д.) в файле dbf? (Или как изменить кодировку при сохранении файла формы)

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд
.

c # - Проблемы с кодированием файлов .dbf dBase III на разных машинах

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

    .

    Смотрите также