Страница 1 из 2
					
				Изменение кодировки DBF файла
				Добавлено: 16 май 2010, 07:09
				 updates-bot
				Обсуждение статьи 
"Изменение кодировки DBF файла"
 
 http://gis-lab.info/qa/dbf-encode.html 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 13 июл 2010, 09:50
				 arzobispo
				Кодировка переводится, но токо потом возникает такой трабл (скрин завтра приложу, на работе нет PostgreSQL): выскакивает сообщение о несовместимости новой кодировки UTF-8 с текущей (1251) кодировкой в PostgreSQL, и при этом невозможно просмотреть таблицу через pgAdmin или при подключении к таблице из QGIS.
			 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 13 июл 2010, 12:42
				 texnik_80
				Доброго времени суток 
 
 
При попытке конвертирования 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....
 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 20 июл 2010, 20:58
				 Максим Дубинин
				Попробуйте еще раз, в скрипт добавлена возможность пропускать символы, которых нет в результирующей кодировке. По умолчанию, они заменяются на вопросы. Подробности в обновленной статье.
			 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 04 авг 2011, 09:32
				 Boris
				Подскажите как правильно ставить этот продукт? У меня на машине только OSGeo. Под ним python запускается, без него - нет. Скачанный инсталятор требует, что бы python был прописан в регистре.
---
Эту проблему я решил скачав вместо инсталятора архив dbfpy-2.2.5.tar.gz и установив его через команду описанную в статье. Проверочная команда выполнилась без ошибок.
Но вопрос как "скрестить" два python'а - устанавливаемый стандартно и в составе OSGeow - осталась. Еще и ArcGIS любит свой python установить... 

 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 04 авг 2011, 11:00
				 Boris
				Подскажите, чт не так? Запускаю:
Код: Выделить всё
...>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: '**********'
 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 04 авг 2011, 12:05
				 Voltron
				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.
Возможно, что-то из этого поможет.
 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 04 авг 2011, 12:34
				 Boris
				спасибо. сейчас попробую зарегистрировать.
			 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 04 авг 2011, 12:41
				 Boris
				Voltron писал(а):
Проблема (если это проблема) известная. Дело в том, что OSGeo4W старается минимально вмешиваться в работу системы, поэтому и не прописывает свой Python в качестве системного
Не вмешиваться - это прекрасно. Но свою ОС она ведь при этом не устанавливает, почему бы и Python уже существующий не использовать.
 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 04 авг 2011, 12:58
				 Mavka
				Это обычное дело в Windows, в OpenOffice тоже свой python используется.
И программы очень часто привязаны к конкретной версии питона.
			 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 04 авг 2011, 13:46
				 Voltron
				Boris писал(а):Не вмешиваться - это прекрасно. Но свою ОС она ведь при этом не устанавливает, почему бы и Python уже существующий не использовать.
Все очень просто. Многие вещи зависят от версии Python, поэтому проще носить свою версию одного пакета, чем 100500 версий остальных под все мыслимые варианты Python.
 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 18 апр 2012, 16:26
				 Nadia
				А возможно скодировать файл dbf из кодировки dos (cp866) в utf8  этим скриптом?
			 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 18 апр 2012, 16:53
				 Voltron
				Да
			 
			
					
				Re: Изменение кодировки DBF файла
				Добавлено: 12 сен 2013, 21:44
				 psyhosis
				только char записи обрежутся, длину поля то никто не скорректировал
			 
			
					
				Ошибка при запуске
				Добавлено: 26 ноя 2014, 13:18
				 vitte
				Добрый день. При запуске выдает следующую ошибку. Подскажите в чем дело.
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: '**********'