Какая кодировка символов используется файлом DBF в шейп-файлах?

52

Какая кодировка символов используется dbf-файлом в шейп-файлах? Кажется, он обрабатывается по-разному, в зависимости от программы и локальных настроек кодировки машины. Какая кодировка 'правильная' - указана для формата?

Mnementh
источник
Вы должны обязательно предоставить флаг ответа alfonx. @underdark Без обид!
JJD

Ответы:

60

Исходный стандарт DBF определяет использование ISO8859-1 и только ISO8859-1. Таким образом, когда вы получаете Shapefile, который действительно соответствует стандартам, это должен быть ISO8859-1. Конечно, это (очень старое) ограничение в настоящее время неприменимо.

ArcGIS и Geopublisher, AtlasStyler и Geoserver начали расширять стандарт для определения кодировки. Например, для ArcGIS просто создайте файл .cpg (с тем же базовым именем, что и у других шейп-файлов) и заполните его именем кодировки.

например, создайте myshape.cpg с помощью texteditor, вставьте 5 символов «UTF-8» и сохраните его. Если вы затем откроете Shapefile в ArcGIS, он прочитает текстовое содержимое DBF в этой кодировке.

Geoserver: Geoserver WFS может экспортировать любой слой WFS в виде сжатого шейп-файла. Когда это сделано, файл .cst содержится в zip-файле, точно так же, как файл .cpg.

Внимание: все это относится только к данным, а не к именам столбцов. Вы действительно должны использовать ASCII только в именах столбцов DBF, если вы хотите, чтобы файл можно было открывать в других программах.

Подсказка: чтобы изменить кодировку DBF, откройте его с помощью OpenOffice Calc .. выберите SaveAs ... нажмите "Параметры фильтра" в левом нижнем углу и нажмите "Сохранить". Затем вы можете определить кодировку для преобразования текстового содержимого в.

alfonx
источник
3
Отличный пост! Мир был бы лучше, если бы люди отправляли свои шейп-файлы с файлами .cpg.
Подземье
2
У вас есть ссылка на официальный набор символов ISO8559-1? Спецификации DBF, которые я нашел, очень короткие и не упоминают об этом.
Крис
3
Если вы получили General input/output error, вероятно, у вас не установлена ​​база . Проблема одна и та же, используете ли вы OpenOffice или LibreOffice.
JJD
2
+1 за подсказку OpenOffice / LibreOffice Calc. Там вы можете убедиться, что файл DBF имеет предполагаемую кодировку. Однако, как указал JJD, также в Ubuntu у вас должна быть установлена ​​библиотека LibreOffice Base для открытия файлов DBF в Calc.
Мариан
1
.cpgФайл должен работать штраф в QGIS, тоже, как из libgdal 1.9. Иногда это даже кажется необходимым: ssrebelious.wordpress.com/2012/03/11/…
krlmlr
11

Я уверен, что нет «правильного» кодирования. Файл .dbf может быть в любой кодировке, и вы сможете открыть Shapefile и правильно прочитать атрибуты, если вы его знаете.

Вы можете найти официальный документ ESRI здесь: http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Я обычно ожидаю, что шейп-файл будет либо UTF-8, либо локальным в покрытой стране (часто с некоторым латинским кодированием).

Подземье
источник
7

Каждый раз, когда я вижу вопрос о кодировке, я отсылаю людей к этой статье: http://www.joelonsoftware.com/articles/Unicode.html

Как говорится:

Не имеет смысла иметь строку, не зная, какую кодировку она использует. Вы больше не можете засовывать голову в песок и делать вид, что «простой» текст - это ASCII.

Марк Ирландия
источник
Именно так! Все время случается так, что люди говорят мне, что я отправил им файл в неправильной кодировке только потому, что редактор (чаще всего np ++) принимает дикие догадки. +1
unicoletti
3

Простой способ - конвертировать файл shp в файл csv. И используйте enca или iconv для определения кодировки. Я попробовал с файлами UTF8 и gb18030, и это работает.

Фрэнк гу
источник
+1 за ответ как способ выяснить текущую кодировку. Однако я думаю, что вопрос был в том, чтобы искать стандартную кодировку, если таковая имеется.
Получите Пространство
этот пост также рассматривается вопрос о том, как определить , кодирующий: gis.stackexchange.com/questions/12218/...
томы