Изменение кодировки DBF файла
-
- Bot
- Сообщения: 276
- Зарегистрирован: 03 фев 2008, 23:13
- Репутация: 3
- arzobispo
- Активный участник
- Сообщения: 230
- Зарегистрирован: 10 сен 2008, 10:28
- Репутация: 3
- Контактная информация:
Re: Изменение кодировки DBF файла
Кодировка переводится, но токо потом возникает такой трабл (скрин завтра приложу, на работе нет PostgreSQL): выскакивает сообщение о несовместимости новой кодировки UTF-8 с текущей (1251) кодировкой в PostgreSQL, и при этом невозможно просмотреть таблицу через pgAdmin или при подключении к таблице из QGIS.
С Уважением, Антон
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 13 июл 2010, 12:32
- Репутация: 0
Re: Изменение кодировки DBF файла
Доброго времени суток
При попытке конвертирования UTF8->CP1251 возникает ошибка такого рода:

При попытке конвертирования UTF8->CP1251 возникает ошибка такого рода:
В частности, на обоих файлах - russia-admin-a и russia-admin-l....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>
- Максим Дубинин
- MindingMyOwnBusiness
- Репутация: 737
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Изменение кодировки DBF файла
Попробуйте еще раз, в скрипт добавлена возможность пропускать символы, которых нет в результирующей кодировке. По умолчанию, они заменяются на вопросы. Подробности в обновленной статье.
пристегивайтесь, турбулентность прямо по курсу
-
- Гуру
- Репутация: 433
- Откуда: Париж
Re: Изменение кодировки DBF файла
Подскажите как правильно ставить этот продукт? У меня на машине только OSGeo. Под ним python запускается, без него - нет. Скачанный инсталятор требует, что бы python был прописан в регистре.
---
Эту проблему я решил скачав вместо инсталятора архив dbfpy-2.2.5.tar.gz и установив его через команду описанную в статье. Проверочная команда выполнилась без ошибок.
Но вопрос как "скрестить" два python'а - устанавливаемый стандартно и в составе OSGeow - осталась. Еще и ArcGIS любит свой python установить...
---
Эту проблему я решил скачав вместо инсталятора архив dbfpy-2.2.5.tar.gz и установив его через команду описанную в статье. Проверочная команда выполнилась без ошибок.
Но вопрос как "скрестить" два python'а - устанавливаемый стандартно и в составе OSGeow - осталась. Еще и ArcGIS любит свой python установить...

Последний раз редактировалось Boris 04 авг 2011, 11:15, всего редактировалось 1 раз.
-
- Гуру
- Репутация: 433
- Откуда: Париж
Re: Изменение кодировки DBF файла
Подскажите, чт не так? Запускаю:
получаю:
Код: Выделить всё
...>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: '**********'
-
- Гуру
- Репутация: 34
- Откуда: Ukraine
Re: Изменение кодировки DBF файла
Проблема (если это проблема) известная. Дело в том, что OSGeo4W старается минимально вмешиваться в работу системы, поэтому и не прописывает свой Python в качестве системногоBoris писал(а):Подскажите как правильно ставить этот продукт? У меня на машине только OSGeo. Под ним python запускается, без него - нет. Скачанный инсталятор требует, что бы python был прописан в регистре.
Полного «скрещивания» врядли можно добиться. Но кое-что в этом направлении делается. Вопрос несколько раз поднимался в списках рассылки:Boris писал(а):Но вопрос как "скрестить" два python'а - устанавливаемый стандартно и в составе OSGeow - осталась. Еще и ArcGIS любит свой python установить...
Installing additional packages for python in OSGeo4W (есть пример параллельной установки Python из OSGeo4W и ArcGIS)
Python on the registry (регистрация Python из состава OSGeo4W в реестре)
Есть тикет #114.
Возможно, что-то из этого поможет.
-
- Гуру
- Репутация: 433
- Откуда: Париж
Re: Изменение кодировки DBF файла
спасибо. сейчас попробую зарегистрировать.
-
- Гуру
- Репутация: 433
- Откуда: Париж
Re: Изменение кодировки DBF файла
Не вмешиваться - это прекрасно. Но свою ОС она ведь при этом не устанавливает, почему бы и Python уже существующий не использовать.Voltron писал(а): Проблема (если это проблема) известная. Дело в том, что OSGeo4W старается минимально вмешиваться в работу системы, поэтому и не прописывает свой Python в качестве системного
- Mavka
- Гуру
- Репутация: 9
Re: Изменение кодировки DBF файла
Это обычное дело в Windows, в OpenOffice тоже свой python используется.
И программы очень часто привязаны к конкретной версии питона.
И программы очень часто привязаны к конкретной версии питона.
лангольеры под окном жрали время ом-ном-ном
-
- Гуру
- Репутация: 34
- Откуда: Ukraine
Re: Изменение кодировки DBF файла
Все очень просто. Многие вещи зависят от версии Python, поэтому проще носить свою версию одного пакета, чем 100500 версий остальных под все мыслимые варианты Python.Boris писал(а):Не вмешиваться - это прекрасно. Но свою ОС она ведь при этом не устанавливает, почему бы и Python уже существующий не использовать.
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 18 апр 2012, 16:16
- Репутация: 0
Re: Изменение кодировки DBF файла
А возможно скодировать файл dbf из кодировки dos (cp866) в utf8 этим скриптом?
-
- Гуру
- Репутация: 34
- Откуда: Ukraine
-
- Интересующийся
- Сообщения: 22
- Зарегистрирован: 05 май 2013, 20:41
- Репутация: 1
Re: Изменение кодировки DBF файла
только char записи обрежутся, длину поля то никто не скорректировал
-
- Интересующийся
- Сообщения: 23
- Зарегистрирован: 16 апр 2012, 04:51
- Репутация: 0
Ошибка при запуске
Добрый день. При запуске выдает следующую ошибку. Подскажите в чем дело.
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: '**********'
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: '**********'
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 16 гостей