Изменение кодировки DBF
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Изменение кодировки DBF
Не подскажет ли кто-нибудь, есть ли в природе консольные утилиты для перевода DBF шейпфайлов из UTF-8 в Win-1251? Интересуют именно консольные утилиты, лучше всего под Unix, но если есть примеры под Win, то тоже пригодятся.
пристегивайтесь, турбулентность прямо по курсу
- JEY
- Активный участник
- Сообщения: 228
- Зарегистрирован: 17 июл 2008, 13:42
- Репутация: 1
Re: Изменение кодировки DBF
Я тоже искал такие утилиты, была такая необходимость, но не нашел. Да и сроки сдачи проекта поджимали...
В результате пришлось дописывать специальный модуль, считывающий *.dbf "на лету", где конвертация в 1251 из UTF-8 происходила непосредственно в момент считывания файла.
Этот вариант меня вполне устроил и работает до сих пор в некоторых из моих проектов!
В результате пришлось дописывать специальный модуль, считывающий *.dbf "на лету", где конвертация в 1251 из UTF-8 происходила непосредственно в момент считывания файла.
Этот вариант меня вполне устроил и работает до сих пор в некоторых из моих проектов!
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Изменение кодировки DBF
расскажите поподробнее про реализацию, если не сложно. Это процедура? На каком языке? Реально ли ее использовать еще где-то?
пристегивайтесь, турбулентность прямо по курсу
- JEY
- Активный участник
- Сообщения: 228
- Зарегистрирован: 17 июл 2008, 13:42
- Репутация: 1
Re: Изменение кодировки DBF
Это программный код, представляющий собой объект класса DBFReader, написанный на Visual Basic .NET. Объект этого класса напрямую связан с классом SHPReader, но суть не в этом...
Принцип работы этого класса основан на непосредственном считывании файла *.dbf и представлении его содержимого в виде таблицы в памяти компьютера. Класс снабжен методами для произвольного доступа к данным (но только в режиме "чтение"), а также связывания этих данных с другими произвольными объектами классов...
Считывание данных выполняется непосредственно в 1251, а не в UTF-8.
Это не изменяет принцип его работы, поскольку промежуточных конвертаций при этом не выполняется!
Часть этого кода можно включить в свои разработки. Если возникнет необходимость, то можно включать не сам исходный код, а производную от него библиотеку функций...
И наконец, поскольку исходный код основан на платформе Microsoft .NET Framework, то лучше всего применять его в рамках Microsoft Visual Studio .NET при разработке прикладных ГИС...
Принцип работы этого класса основан на непосредственном считывании файла *.dbf и представлении его содержимого в виде таблицы в памяти компьютера. Класс снабжен методами для произвольного доступа к данным (но только в режиме "чтение"), а также связывания этих данных с другими произвольными объектами классов...
Считывание данных выполняется непосредственно в 1251, а не в UTF-8.
Это не изменяет принцип его работы, поскольку промежуточных конвертаций при этом не выполняется!
Часть этого кода можно включить в свои разработки. Если возникнет необходимость, то можно включать не сам исходный код, а производную от него библиотеку функций...
И наконец, поскольку исходный код основан на платформе Microsoft .NET Framework, то лучше всего применять его в рамках Microsoft Visual Studio .NET при разработке прикладных ГИС...
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: Изменение кодировки DBF
В свое время у меня вставала такая же задача, только нужно было перекодировать в обратном направлении. Готовых утилит я не нашел, пришлось написать небольшой скриптик на питоне. В основе его лежит библиотека, позволяющая работать с dbf файлами на питон dbfpy.sim писал(а):Не подскажет ли кто-нибудь, есть ли в природе консольные утилиты для перевода DBF шейпфайлов из UTF-8 в Win-1251? Интересуют именно консольные утилиты, лучше всего под Unix, но если есть примеры под Win, то тоже пригодятся.
Вот пример кода, который переконвертирует файл 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()
Последний раз редактировалось KolesovDmitry 30 май 2009, 08:34, всего редактировалось 1 раз.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Изменение кодировки DBF
супер! действительно очень удобно и работает прекрасно, большое спасибо. Я засомневался было, съест ли Arcview сконвертированный вариант, проблем не возникло.
разумеется для конвертации UTF-8->Win 1251, в коде меняем:
на
еще, для тех кто столкнется, я по неопытности провозился минут 10, после скачивания библиотеки - выполняем команду, которая копирует dbfpy куда надо (а именно в site-packages):
иначе все время будем получать ошибку
разумеется для конвертации UTF-8->Win 1251, в коде меняем:
Код: Выделить всё
f=unicode(f,'windows-1251')
f=f.encode('utf-8')
Код: Выделить всё
f=unicode(f,'utf-8')
f=f.encode('windows-1251')
Код: Выделить всё
python setup.py install
Код: Выделить всё
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
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 26 фев 2009, 21:09
- Репутация: 0
Re: Изменение кодировки DBF
Извините, у меня вопрос, как этот скрипт( код) вставить в ArcGIS?
- paleogis
- Модератор
- Сообщения: 1112
- Зарегистрирован: 22 мар 2009, 08:54
- Репутация: 200
- Ваше звание: Модератоо
Re: Изменение кодировки DBF
Не буду открывать Америку. Поменять кодировку можно в QGIS при экспорте в SHP
- Bzzzuka
- Участник
- Сообщения: 81
- Зарегистрирован: 12 окт 2009, 13:06
- Репутация: 0
- Откуда: Казань
- Контактная информация:
Re: Изменение кодировки DBF
что нужно сделать чтобы это с shp сработало? Или это возможно в Qgis?
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Изменение кодировки DBF
В QGIS сменить кодировку файла при открытии (или при сохранении в shp).
Редактор материалов, модератор форума
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 13 гостей