Welche Zeichenkodierung wird von der DBF-Datei in Shapefiles verwendet?

52

Welche Zeichenkodierung verwendet die DBF-Datei in Shapefiles? Es scheint, als würde es anders gehandhabt, basierend auf dem Programm und den lokalen Kodierungseinstellungen der Maschine. Welche Kodierung ist 'richtig' - für das Format festgelegt?

Mnementh
quelle
Sie sollten alfonx definitiv das Antwortflag erteilen. @underdark Nichts für ungut!
JJD

Antworten:

60

Der ursprüngliche DBF-Standard definiert die Verwendung von ISO8859-1 und nur ISO8859-1. Wenn Sie also ein Shapefile erhalten, das wirklich den Standards entspricht, sollte es ISO8859-1 sein. Natürlich ist diese (sehr alte) Einschränkung heutzutage nicht wirklich verwendbar.

ArcGIS und Geopublisher, AtlasStyler und Geoserver haben begonnen, den Standard zu erweitern, um die Codierung zu definieren. Erstellen Sie für ArcGIS beispielsweise einfach eine .cpg-Datei (mit demselben Basisnamen wie die anderen Shapefiles) und füllen Sie sie mit dem Namen der Codierung.

zB erstelle eine myshape.cpg mit einem Texteditor und füge 5 Zeichen "UTF-8" ein und speichere sie. Wenn Sie dann das Shapefile in ArcGIS öffnen, wird der Textinhalt des DBF in diesem Zeichensatz gelesen.

Geoserver: Geoserver WFS kann jede WFS-Ebene als gezipptes Shapefile exportieren. Wenn dies erledigt ist, befindet sich eine .cst-Datei in der ZIP-Datei. Dies entspricht genau der .cpg-Datei.

Achtung: All dies gilt nur für die Daten, nicht für die Spaltennamen. Sie sollten eigentlich nur ASCII in den Spaltennamen eines DBF verwenden, wenn Sie möchten, dass die Datei mit anderen Programmen geöffnet werden kann.

Tipp: Um die Codierung eines DBF zu ändern, öffnen Sie ihn mit OpenOffice Calc. Wählen Sie Speichern unter. Klicken Sie links unten auf "Filteroptionen" und klicken Sie auf Speichern. Anschließend können Sie die Codierung definieren, in die der Textinhalt konvertiert werden soll.

Alfonx
quelle
3
Guter Eintrag! Die Welt wäre ein besserer Ort, wenn die Leute ihre Shapefiles mit .cpg-Dateien versenden würden.
Underdunkel
2
Haben Sie eine Referenz für den Zeichensatz ISO8559-1, der der offizielle Zeichensatz ist? Die DBF-Spezifikationen, die ich gefunden habe, sind sehr kurz und erwähnen es nicht.
Chris
3
Wenn Sie eine erhalten, ist BaseGeneral input/output error wahrscheinlich nicht installiert . Das Problem ist das gleiche, ob Sie OpenOffice oder LibreOffice verwenden.
JJD
2
+1 für den OpenOffice / LibreOffice Calc-Hinweis. Dort können Sie sicherstellen, dass die DBF-Datei die angenommene Codierung aufweist. Wie JJD hervorhob, muss LibreOffice Base auch unter Ubuntu installiert sein, damit DBF-Dateien in Calc geöffnet werden können.
Marian
1
Eine .cpgDatei soll ab libgdal 1.9 auch in QGIS einwandfrei funktionieren. Manchmal scheint es sogar notwendig zu sein: ssrebelious.wordpress.com/2012/03/11/…
krlmlr
11

Ich bin mir ziemlich sicher, dass es keine "richtige" Codierung gibt. Eine DBF-Datei kann in einer beliebigen Codierung vorliegen. Sie können dann das Shapefile öffnen und die Attribute korrekt lesen, wenn Sie sie kennen.

Das ESRI-Whitepaper finden Sie hier: http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Normalerweise erwarte ich, dass ein Shapefile entweder UTF-8 ist oder sich im Gebiet des abgedeckten Landes befindet (oft eine lateinische Kodierung).

Underdunkel
quelle
7

Immer wenn ich eine Frage zum Kodieren sehe, verweise ich auf diesen Artikel: http://www.joelonsoftware.com/articles/Unicode.html

Wie es sagt:

Es ist nicht sinnvoll, einen String zu haben, ohne zu wissen, welche Codierung er verwendet. Sie können Ihren Kopf nicht mehr in den Sand stecken und so tun, als wäre "normaler" Text ASCII.

Markieren Sie Irland
quelle
Genau! Es kommt immer wieder vor, dass mir Leute sagen, ich hätte ihnen eine Datei in der falschen Codierung gesendet, nur weil ein Editor (meistens np ++) wilde Vermutungen anstellt. +1
unicoletti
3

Eine einfache Möglichkeit ist die Konvertierung einer shp-Datei in eine csv-Datei. Verwenden Sie enca oder iconv, um die Codierung zu erkennen. Ich habe es mit UTF8- und gb18030-Dateien versucht und es funktioniert.

Frank gu
quelle
+1 für die Antwort, um die aktuelle Kodierung zu ermitteln. Ich denke jedoch, dass die Frage eher danach suchte, was eine Standardcodierung sein würde, wenn überhaupt.
Holen Sie sich Spatial
Dieser Beitrag befasst sich auch mit der Frage, wie Codierung zu erkennen: gis.stackexchange.com/questions/12218/...
Toms