<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.gis-lab.info/index.php?action=history&amp;feed=atom&amp;title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8_DBF_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0</id>
	<title>Изменение кодировки DBF файла - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gis-lab.info/index.php?action=history&amp;feed=atom&amp;title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8_DBF_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0"/>
	<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8_DBF_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0&amp;action=history"/>
	<updated>2026-04-03T23:49:35Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8_DBF_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0&amp;diff=6044&amp;oldid=prev</id>
		<title>Voltron: Новая страница: «{{Статья|Опубликована|dbf-encode}} {{Аннотация|Описание использования библиотеки dbfpy для измен…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8_DBF_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0&amp;diff=6044&amp;oldid=prev"/>
		<updated>2012-07-24T18:07:42Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{{Статья|Опубликована|dbf-encode}} {{Аннотация|Описание использования библиотеки dbfpy для измен…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Статья|Опубликована|dbf-encode}}&lt;br /&gt;
{{Аннотация|Описание использования библиотеки dbfpy для изменения кодировки данных и скрипт.}}&lt;br /&gt;
&lt;br /&gt;
Неотъемлемой частью данных в формате shape является атрибутивная таблица в формате DBF. Атрибутивные данные могут храниться в разных кодировках, часто встречаются такие кодировки как Windows-1251 (CP1251) и UTF8, KOI8-R. Некоторое, особенно относительно давно появившиеся ГИС, такие как Arcview GIS 3.x, некоторые версии Mapinfo, не умеют работать с более новой кодировкой UTF8. Соответственно, часто встречается задача перевода DBF из одной кодировки в другую.&lt;br /&gt;
&lt;br /&gt;
Для преобразования dbf из одной кодировки в другую можно использовать скрипт на языке Python ([http://gis-lab.info/programs/python/dbf-encode.zip скачать] скрипт). Эта статья описывает подготовку к работе, идею скрипта и как с ним работать.&lt;br /&gt;
&lt;br /&gt;
=== Подготовка к работе ===&lt;br /&gt;
&lt;br /&gt;
Для работы скрипта необходимо иметь Python 2.5/2.6 и один раз скачать и установить библиотеку [http://dbfpy.sourceforge.net/ dbfpy]. После загрузки библиотеки нужно выполнить:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python setup.py install&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правильность установки библиотеки можно проверить запустив Python и выполнив:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;from dbfpy import dbf&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если все установлено нормально, ошибок эта команда выдать не должна.&lt;br /&gt;
&lt;br /&gt;
=== Идея ===&lt;br /&gt;
&lt;br /&gt;
В процессе работы, наш скрипт должен построчно проверять тип поля в исходном файле DBF и, если он строковый, т.е. есть вероятность того, что данные не в той кодировке, что нужно, осуществлять преобразование. Упрощенная версия скрипта на языке Python для перевода данных из кодировки в кодироввку выглядит следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
#--*-- encoding: utf-8 --*--&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
from dbfpy import dbf&lt;br /&gt;
from types import *&lt;br /&gt;
&lt;br /&gt;
db = dbf.Dbf(sys.argv[1])&lt;br /&gt;
newDB=dbf.Dbf(sys.argv[2], new=True)&lt;br /&gt;
&lt;br /&gt;
for f in db.header.fields:&lt;br /&gt;
   newDB.addField(f)&lt;br /&gt;
&lt;br /&gt;
for rec in db:&lt;br /&gt;
   r=newDB.newRecord()&lt;br /&gt;
   newData=[]&lt;br /&gt;
   for f in rec.fieldData:&lt;br /&gt;
      if type(f)==StringType:&lt;br /&gt;
         f=unicode(f,'utf-8')&lt;br /&gt;
         f=f.encode('windows-1251')&lt;br /&gt;
      newData.append(f)&lt;br /&gt;
   r.fieldData=newData&lt;br /&gt;
   r.store()&lt;br /&gt;
&lt;br /&gt;
db.close()&lt;br /&gt;
newDB.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Использование ===&lt;br /&gt;
&lt;br /&gt;
Утилита вызывается из командной строки и принимает несколько параметров:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python dbf-encode.py -f encin -t encout -n input output&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;input&amp;lt;/tt&amp;gt; — имя исходного файла dbf, который требуется преобразовать, обязателен&lt;br /&gt;
* &amp;lt;tt&amp;gt;output&amp;lt;/tt&amp;gt; — имя конечного файла dbf, куда будет записан результат, обязателен&lt;br /&gt;
* &amp;lt;tt&amp;gt;-f&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;--from-code&amp;lt;/tt&amp;gt;) — кодировка исходного DBF файла, не обязателен, по умолчанию UTF-8&lt;br /&gt;
* &amp;lt;tt&amp;gt;-t&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;--to-code&amp;lt;/tt&amp;gt;) — кодировка выходного DBF файла, не обязателен, по умолчанию CP-1251&lt;br /&gt;
* &amp;lt;tt&amp;gt;-n&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;--no-subs&amp;lt;/tt&amp;gt;) — переключатель, если установлен, то неизвестные символы пропускаются, если не установлен — заменяются на знаки вопроса («?»)&lt;br /&gt;
* &amp;lt;tt&amp;gt;-h&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;--help&amp;lt;/tt&amp;gt;) — справка&lt;br /&gt;
* &amp;lt;tt&amp;gt;-v&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;--version&amp;lt;/tt&amp;gt;) — версия программы&lt;br /&gt;
&lt;br /&gt;
=== Пример использования ===&lt;br /&gt;
&lt;br /&gt;
Конвертировать &amp;lt;tt&amp;gt;adygeya-admin-a.dbf&amp;lt;/tt&amp;gt; в &amp;lt;tt&amp;gt;adygeya-admin-a2.dbf&amp;lt;/tt&amp;gt; из кодировки UTF-8 в кодировку CP-1251.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python dbf-encode.py -f UTF8 -t CP1251 adygeya-admin-a.dbf adygeya-admin-a2.dbf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или упрощенная запись параметров командной строки (эти кодировки и так являются кодировками на входе и выходе по умолчанию):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python dbf-encode.py adygeya-admin-a.dbf adygeya-admin-a2.dbf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ошибки конвертации ===&lt;br /&gt;
&lt;br /&gt;
Если конвертер сталкивается с символом, который не может перекодировать, он по-умолчанию заменяет его на вопросительный знак («?»), если к строке запуска добавлен &amp;lt;tt&amp;gt;--no-subs&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;-n&amp;lt;/tt&amp;gt;), то символ пропускается.&lt;br /&gt;
&lt;br /&gt;
Если возникает другая ошибка при конвертации, конвертер выводит содержание записи на которой возникла ошибка в консоль и прекращает работу. Конечный файл создается неполным и для подмены оригинального в shape-файле непригоден.&lt;br /&gt;
&lt;br /&gt;
Ошибка '''invalid syntax''' может быть связана с неправильным запуском скрипта, под Windows запуск нужно осуществлять из командного процессора («Пуск → Выполнить → cmd») после чего вводить команду указанную выше.&lt;br /&gt;
&lt;br /&gt;
[http://gis-lab.info/programs/python/dbf-encode.zip Скачать] полную версию dbf-encode.py&lt;br /&gt;
&lt;br /&gt;
=== Ссылки по теме ===&lt;br /&gt;
&lt;br /&gt;
* [http://gis-lab.info/qa/dbf2csv.html Конвертация DBF в CSV]&lt;/div&gt;</summary>
		<author><name>Voltron</name></author>
	</entry>
</feed>