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

Обсуждение материалов сайта: вопросы, замечания, предложения
updates-bot
Bot
Сообщения: 276
Зарегистрирован: 03 фев 2008, 23:13
Репутация: 3

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

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

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

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

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

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

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

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

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

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

Сообщение texnik_80 » 13 июл 2010, 12: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....

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 8910
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 644
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

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

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

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

Boris
Гуру
Сообщения: 3964
Зарегистрирован: 10 апр 2006, 22:34
Статьи: 3
Проекты: 1
Репутация: 365
Откуда: Париж

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

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

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

Boris
Гуру
Сообщения: 3964
Зарегистрирован: 10 апр 2006, 22:34
Статьи: 3
Проекты: 1
Репутация: 365
Откуда: Париж

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

Сообщение Boris » 04 авг 2011, 11: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: '**********'

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

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

Сообщение Voltron » 04 авг 2011, 12: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.
Возможно, что-то из этого поможет.

Boris
Гуру
Сообщения: 3964
Зарегистрирован: 10 апр 2006, 22:34
Статьи: 3
Проекты: 1
Репутация: 365
Откуда: Париж

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

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

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

Boris
Гуру
Сообщения: 3964
Зарегистрирован: 10 апр 2006, 22:34
Статьи: 3
Проекты: 1
Репутация: 365
Откуда: Париж

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Да

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

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

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

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

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

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

Сообщение vitte » 26 ноя 2014, 13: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: '**********'

Ответить

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