Страница 1 из 1
Изменение кодировки DBF
Добавлено: 01 сен 2008, 21:45
Максим Дубинин
Не подскажет ли кто-нибудь, есть ли в природе консольные утилиты для перевода DBF шейпфайлов из UTF-8 в Win-1251? Интересуют именно консольные утилиты, лучше всего под Unix, но если есть примеры под Win, то тоже пригодятся.
Re: Изменение кодировки DBF
Добавлено: 02 сен 2008, 09:55
JEY
Я тоже искал такие утилиты, была такая необходимость, но не нашел. Да и сроки сдачи проекта поджимали...
В результате пришлось дописывать специальный модуль, считывающий *.dbf "на лету", где конвертация в 1251 из UTF-8 происходила непосредственно в момент считывания файла.
Этот вариант меня вполне устроил и работает до сих пор в некоторых из моих проектов!
Re: Изменение кодировки DBF
Добавлено: 02 сен 2008, 18:32
Максим Дубинин
расскажите поподробнее про реализацию, если не сложно. Это процедура? На каком языке? Реально ли ее использовать еще где-то?
Re: Изменение кодировки DBF
Добавлено: 03 сен 2008, 09:12
JEY
Это программный код, представляющий собой объект класса DBFReader, написанный на Visual Basic .NET. Объект этого класса напрямую связан с классом SHPReader, но суть не в этом...
Принцип работы этого класса основан на непосредственном считывании файла *.dbf и представлении его содержимого в виде таблицы в памяти компьютера. Класс снабжен методами для произвольного доступа к данным (но только в режиме "чтение"), а также связывания этих данных с другими произвольными объектами классов...
Считывание данных выполняется непосредственно в 1251, а не в UTF-8.
Это не изменяет принцип его работы, поскольку промежуточных конвертаций при этом не выполняется!
Часть этого кода можно включить в свои разработки. Если возникнет необходимость, то можно включать не сам исходный код, а производную от него библиотеку функций...
И наконец, поскольку исходный код основан на платформе Microsoft .NET Framework, то лучше всего применять его в рамках Microsoft Visual Studio .NET при разработке прикладных ГИС...
Re: Изменение кодировки DBF
Добавлено: 03 сен 2008, 11:06
KolesovDmitry
sim писал(а):Не подскажет ли кто-нибудь, есть ли в природе консольные утилиты для перевода DBF шейпфайлов из UTF-8 в Win-1251? Интересуют именно консольные утилиты, лучше всего под Unix, но если есть примеры под Win, то тоже пригодятся.
В свое время у меня вставала такая же задача, только нужно было перекодировать в обратном направлении. Готовых утилит я не нашел, пришлось написать небольшой скриптик на питоне. В основе его лежит библиотека, позволяющая работать с dbf файлами на питон
dbfpy.
Вот пример кода, который переконвертирует файл towns.dbf из Win-1251в UTF-8 и сохраняет результат в файл test.dbf:
Код: Выделить всё
#!/usr/bin/python
#--*-- encoding: utf-8 --*--
from dbfpy import dbf # импортируем библиотеку
from types import *
db = dbf.Dbf("towns.dbf")
newDB=dbf.Dbf("test.dbf", new=True)
for f in db.header.fields: # копируем структуру dbf-файла
newDB.addField(f)
for rec in db: # копируем записи из одного файла в другой
r=newDB.newRecord()
newData=[]
for f in rec.fieldData:
if type(f)==StringType: # если поле символьного типа - перекодируем
f=unicode(f,'windows-1251')
f=f.encode('utf-8')
newData.append(f)
r.fieldData=newData
r.store() # сохраняем текущую запись
db.close()
newDB.close()
Библиотека удобная, своего кода писать немного - так что рекомендую

Re: Изменение кодировки DBF
Добавлено: 04 сен 2008, 05:01
Максим Дубинин
супер! действительно очень удобно и работает прекрасно, большое спасибо. Я засомневался было, съест ли Arcview сконвертированный вариант, проблем не возникло.
разумеется для конвертации UTF-8->Win 1251, в коде меняем:
Код: Выделить всё
f=unicode(f,'windows-1251')
f=f.encode('utf-8')
на
Код: Выделить всё
f=unicode(f,'utf-8')
f=f.encode('windows-1251')
еще, для тех кто столкнется, я по неопытности провозился минут 10, после скачивания библиотеки - выполняем команду, которая копирует dbfpy куда надо (а именно в site-packages):
иначе все время будем получать ошибку
Код: Выделить всё
root@ubuntu:~/src/dbfpy-2.2.1/dbfpy# python dbfer.py
Traceback (most recent call last):
File "dbfer.py", line 4, in <module>
from dbfpy import dbf
ImportError: cannot import name dbf
Re: Изменение кодировки DBF
Добавлено: 29 окт 2009, 14:34
azot101
Извините, у меня вопрос, как этот скрипт( код) вставить в ArcGIS?
Re: Изменение кодировки DBF
Добавлено: 29 окт 2009, 18:09
paleogis
Не буду открывать Америку. Поменять кодировку можно в QGIS при экспорте в SHP
Re: Изменение кодировки DBF
Добавлено: 11 окт 2010, 12:10
Bzzzuka
что нужно сделать чтобы это с shp сработало? Или это возможно в Qgis?
Re: Изменение кодировки DBF
Добавлено: 11 окт 2010, 13:16
Александр Мурый
В QGIS сменить кодировку файла при открытии (или при сохранении в shp).