GIS-LAB

Географические информационные системы и дистанционное зондирование


Форумы GIS-Lab.info

Геоинформационные системы (ГИС) и Дистанционное зондирование Земли


Изменение кодировки DBF файла

Обсуждение материалов сайта: вопросы, замечания, предложения

Изменение кодировки DBF файла

Сообщение updates-bot » 16 май 2010, 08:09

Обсуждение статьи "Изменение кодировки DBF файла"

http://gis-lab.info/qa/dbf-encode.html
  • 0

updates-bot
Bot
 
Зарегистрирован: 04 фев 2008
 
Сообщения: 276
Репутация: 2

Re: Изменение кодировки DBF файла

Сообщение arzobispo » 13 июл 2010, 10:50

Кодировка переводится, но токо потом возникает такой трабл (скрин завтра приложу, на работе нет PostgreSQL): выскакивает сообщение о несовместимости новой кодировки UTF-8 с текущей (1251) кодировкой в PostgreSQL, и при этом невозможно просмотреть таблицу через pgAdmin или при подключении к таблице из QGIS.
  • 0

С Уважением, Антон
Аватара пользователя
arzobispo
Активный участник
 
Зарегистрирован: 10 сен 2008
 
Сообщения: 230
Репутация: 1

Re: Изменение кодировки DBF файла

Сообщение texnik_80 » 13 июл 2010, 13:42

Доброго времени суток :)

При попытке конвертирования UTF8->CP1251 возникает ошибка такого рода:
Traceback (most recent call last):
File "dbf-encode.py", line 70, in <module>
f=f.encode(outENC)
File "C:\Python27\lib\encodings\cp1251.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>


В частности, на обоих файлах - russia-admin-a и russia-admin-l....
  • 0

texnik_80
Новоприбывший
 
Зарегистрирован: 13 июл 2010
 
Сообщения: 1
Репутация: 0

Re: Изменение кодировки DBF файла

Сообщение Максим Дубинин » 20 июл 2010, 21:58

Попробуйте еще раз, в скрипт добавлена возможность пропускать символы, которых нет в результирующей кодировке. По умолчанию, они заменяются на вопросы. Подробности в обновленной статье.
  • 0

пристегивайтесь, турбулентность прямо по курсу
Аватара пользователя
Максим Дубинин
NextGIS
 
Зарегистрирован: 06 окт 2003
Откуда: Москва (на карте)
 
Сообщения: 8865
Репутация: 627
Статьи: 231
Проекты: 12/6

Re: Изменение кодировки DBF файла

Сообщение Boris » 04 авг 2011, 10:32

Подскажите как правильно ставить этот продукт? У меня на машине только OSGeo. Под ним python запускается, без него - нет. Скачанный инсталятор требует, что бы python был прописан в регистре.
---
Эту проблему я решил скачав вместо инсталятора архив dbfpy-2.2.5.tar.gz и установив его через команду описанную в статье. Проверочная команда выполнилась без ошибок.
Но вопрос как "скрестить" два python'а - устанавливаемый стандартно и в составе OSGeow - осталась. Еще и ArcGIS любит свой python установить... :?
  • 0

Последний раз редактировалось Boris 04 авг 2011, 12:15, всего редактировалось 1 раз.
Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3893
Репутация: 339
Статьи: 3
Проекты: 1

Re: Изменение кодировки DBF файла

Сообщение Boris » 04 авг 2011, 12:00

Подскажите, чт не так? Запускаю:
Код: Выделить всё
...>python C:\OSGeo4W\apps\dbfpy\dbf-encode.py tracks.dbf tracks_.dbf

получаю:
Traceback (most recent call last):
File "C:\OSGeo4W\apps\dbfpy\dbf-encode.py", line 66, in <module>
for rec in inFile:
File "C:\OSGeo4W\apps\Python25\lib\site-packages\dbfpy\dbf.py", line 242, in __getitem__
return self.RecordClass.fromStream(self, self._fixIndex(index))
File "C:\OSGeo4W\apps\Python25\lib\site-packages\dbfpy\record.py", line 121, in fromStream
return cls.fromString(dbf, cls.rawFromStream(dbf, index), index)
File "C:\OSGeo4W\apps\Python25\lib\site-packages\dbfpy\record.py", line 140, in fromString
[_fd.decodeFromRecord(string) for _fd in dbf.header.fields])
File "C:\OSGeo4W\apps\Python25\Lib\site-packages\dbfpy\fields.py", line 173, in decodeFromRecord
return self.decodeValue(self.rawFromRecord(record))
File "C:\OSGeo4W\apps\Python25\Lib\site-packages\dbfpy\fields.py", line 244, in decodeValue
return int(value)
ValueError: invalid literal for int() with base 10: '**********'
  • 0

Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3893
Репутация: 339
Статьи: 3
Проекты: 1

Re: Изменение кодировки DBF файла

Сообщение Voltron » 04 авг 2011, 13:05

Boris писал(а):Подскажите как правильно ставить этот продукт? У меня на машине только OSGeo. Под ним python запускается, без него - нет. Скачанный инсталятор требует, что бы python был прописан в регистре.

Проблема (если это проблема) известная. Дело в том, что OSGeo4W старается минимально вмешиваться в работу системы, поэтому и не прописывает свой Python в качестве системного
Boris писал(а):Но вопрос как "скрестить" два python'а - устанавливаемый стандартно и в составе OSGeow - осталась. Еще и ArcGIS любит свой python установить... :?

Полного «скрещивания» врядли можно добиться. Но кое-что в этом направлении делается. Вопрос несколько раз поднимался в списках рассылки:
Installing additional packages for python in OSGeo4W (есть пример параллельной установки Python из OSGeo4W и ArcGIS)
Python on the registry (регистрация Python из состава OSGeo4W в реестре)
Есть тикет #114.
Возможно, что-то из этого поможет.
  • 0

Voltron
Гуру
 
Зарегистрирован: 29 мар 2007
Откуда: Ukraine (на карте)
 
Сообщения: 2627
Репутация: 32
Статьи: 31
Проекты: 4/1

Re: Изменение кодировки DBF файла

Сообщение Boris » 04 авг 2011, 13:34

спасибо. сейчас попробую зарегистрировать.
  • 0

Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3893
Репутация: 339
Статьи: 3
Проекты: 1

Re: Изменение кодировки DBF файла

Сообщение Boris » 04 авг 2011, 13:41

Voltron писал(а):Проблема (если это проблема) известная. Дело в том, что OSGeo4W старается минимально вмешиваться в работу системы, поэтому и не прописывает свой Python в качестве системного

Не вмешиваться - это прекрасно. Но свою ОС она ведь при этом не устанавливает, почему бы и Python уже существующий не использовать.
  • 0

Boris
Гуру
 
Зарегистрирован: 10 апр 2006
Откуда: Париж (на карте)
 
Сообщения: 3893
Репутация: 339
Статьи: 3
Проекты: 1

Re: Изменение кодировки DBF файла

Сообщение Mavka » 04 авг 2011, 13:58

Это обычное дело в Windows, в OpenOffice тоже свой python используется.
И программы очень часто привязаны к конкретной версии питона.
  • 0

лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
Mavka
Гуру
 
Зарегистрирован: 14 мар 2008
 
Сообщения: 2060
Репутация: 9
Статьи: 11
Проекты: 2/1

Re: Изменение кодировки DBF файла

Сообщение Voltron » 04 авг 2011, 14:46

Boris писал(а):Не вмешиваться - это прекрасно. Но свою ОС она ведь при этом не устанавливает, почему бы и Python уже существующий не использовать.

Все очень просто. Многие вещи зависят от версии Python, поэтому проще носить свою версию одного пакета, чем 100500 версий остальных под все мыслимые варианты Python.
  • 0

Voltron
Гуру
 
Зарегистрирован: 29 мар 2007
Откуда: Ukraine (на карте)
 
Сообщения: 2627
Репутация: 32
Статьи: 31
Проекты: 4/1

Re: Изменение кодировки DBF файла

Сообщение Nadia » 18 апр 2012, 17:26

А возможно скодировать файл dbf из кодировки dos (cp866) в utf8 этим скриптом?
  • 0

Nadia
Новоприбывший
 
Зарегистрирован: 18 апр 2012
 
Сообщения: 1
Репутация: 0

Re: Изменение кодировки DBF файла

Сообщение Voltron » 18 апр 2012, 17:53

Да
  • 0

Voltron
Гуру
 
Зарегистрирован: 29 мар 2007
Откуда: Ukraine (на карте)
 
Сообщения: 2627
Репутация: 32
Статьи: 31
Проекты: 4/1

Re: Изменение кодировки DBF файла

Сообщение psyhosis » 12 сен 2013, 22:44

только char записи обрежутся, длину поля то никто не скорректировал
  • 0

psyhosis
Интересующийся
 
Зарегистрирован: 05 май 2013
 
Сообщения: 22
Репутация: 1

Ошибка при запуске

Сообщение vitte » 26 ноя 2014, 14:18

Добрый день. При запуске выдает следующую ошибку. Подскажите в чем дело.

C:\convert>python dbf-encode.py -f CP1251 -t UTF8 sqlexport_linestring.dbf sqlex
port_linestring2.dbf
Traceback (most recent call last):
File "dbf-encode.py", line 66, in <module>
for rec in inFile:
File "C:\Python26\lib\site-packages\dbfpy\dbf.py", line 261, in __getitem__
return self.RecordClass.fromStream(self, self._fixIndex(index))
File "C:\Python26\lib\site-packages\dbfpy\record.py", line 121, in fromStream
return cls.fromString(dbf, cls.rawFromStream(dbf, index), index)
File "C:\Python26\lib\site-packages\dbfpy\record.py", line 140, in fromString
[_fd.decodeFromRecord(string) for _fd in dbf.header.fields])
File "C:\Python26\lib\site-packages\dbfpy\fields.py", line 178, in decodeFromR
ecord
return self.decodeValue(self.rawFromRecord(record))
File "C:\Python26\lib\site-packages\dbfpy\fields.py", line 249, in decodeValue

return int(value)
ValueError: invalid literal for int() with base 10: '**********'
  • 0

vitte
Интересующийся
 
Зарегистрирован: 16 апр 2012
 
Сообщения: 23
Репутация: 0

След.

Вернуться в Материалы сайта

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


(Геокруг)

© GIS-Lab и авторы, 2002-2013. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов (подробнее).