pgsql2shp Export in UTF-8 und falsche Darstellung in ArcGIS

Hallo,

ich habe das Problem das von pgsql2shp und QGIS erstellte Shapedateien im UTF-8 Format von ArcGIS zwar geöffnet und angezeigt werden aber Umlaute und Unicodezeichen falsch dargestellt werden.
Da die Variante über .cpg-Datei und Registryeintrag nicht funktionierten habe ich nach langem suchen ein Hinweis auf eine Einstellung im Header der .dbf-Datei gefunden. Das 29. Byte in der Datei ist die „Language driver ID“ die bei funktionierenden Shapedateien auf 00 steht und bei pgsql2shp und QGIS auf 57 was aber keine offizielle ID zu sein scheint. Also habe ich einfach mit einem Hex-Editor die 57 mit 00 überschrieben und siehe da ArcGIS zeigt alles richtig an.

Meine Frage ist jetzt wie ich das ganze ohne diesen Aufwand mit dem Hex-Editor beeinflussen kann also ArcGIS dazu bringen diese ID nicht zu beachten oder pgsql2shp die ID auf 00 zu setzen?

MfG

Irgendwo habe ich in Erinnerung, das ESRI-Shapes intern immer Latin-1 codiert sein möchten. Also könntest du sie mal mal versuchen als Latin-1 rauszuschreiben, bzw. per set client_encoding die Darstellung zu beeinflussen. Ich schu mal wi ich das beim letzten Mal gelöst habe…

Gruß Uwe

Mit “client_encoding = LATIN1” funktioniert nicht da er die Unicodezeichen ja nicht umwandeln kann:
“Dumping: XXRecordFetch: FEHLER: Zeichen 0xe28093 in Kodierung UTF8 hat keine Entsprechung in LATIN1”

Ich möchte aber die Unicodezeichen behalten, also das Ergebnis muß schon UTF-8 bleiben nur im Header muß was für ArcGIS verständliches stehen.

Hm. Ich kann das im Moment nicht reproduzieren. In einem Projekt hier wurden UTF-8 Daten mit Umlaute etc. einwandfrei in ein Shapefile verfrachtet und AFAIR auch korrekt angezeigt. Leider kann ich das im Moment nur in QGis prüfen, aber sobald ich mir wieder eine VM mit Windows eingerichtet habe schau ich auch in ArcGIS nach. Welche Versionen von PostGIS/ArcView verwendest du denn? Hast du die Daten mit dem richtigen encoding eingelesen?
Encoding ist eine Geschichte voller Mißverständnisse :wink:

Gruß Uwe

Versionen:
ArcView 9.3.1 bzw. ArcCatalog usw.
“PostgreSQL 8.4.7 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 64-bit”
“POSTGIS=“1.5.2” GEOS=“3.2.2-CAPI-1.6.2” PROJ=“Rel. 4.7.1, 23 September 2009” LIBXML=“2.7.6” USE_STATS”

CREATE DATABASE osm_sn
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'de_DE.utf8'
       LC_CTYPE = 'de_DE.utf8'
       CONNECTION LIMIT = -1;

Die Daten sind von OSM importiert mit osm2pgsql und werden bei jeder direkten Abfrage der Datenbank korrekt angezeigt.

QGIS funktioniert bei mir ja auch. (erstellt genauso wie pgsql2shp die *.dbf mit dem 29. Byte 0x57)
Hab nicht alle Programme ausprobiert aber in der ganzen Open Source Welt scheint es damit kein Problem zu geben.

Wenn ich das ganze im Link richtig verstehe erkennt ArcGIS die Language driver ID nicht und nimmt dann immer OEM obwohl *.cpg und Registry eintrag auf UTF-8 stehen.
21106 - Read and write shapefile and dBASE files encoded in various code pages
DBase File Structure

Wenn das Byte aber auf 0x00 (undefiniert) gesetzt wird nimmt ArcGIS die *.cpg oder Registryeintrag.

Hat keiner noch Ideen? :frowning:

Bester Workaround bisher:

dd if=/dev/zero of=xyz.dbf conv=notrunc bs=1 count=1 seek=29