Encoding-Probleme mit ogr2ogr und Postgis/PostgreSQL-Datenbank
In unserer Organisation, wir behandeln GIS-Inhalte in verschiedenen Datei-Formaten. Ich brauche diese Dateien in eine PostGIS-Datenbank, und das geschieht mit ogr2ogr. Das problem ist, dass die Datenbank ist UTF8 kodiert, und die Dateien, die vielleicht eine andere Codierung.
Fand ich die Beschreibungen, wie kann ich die Kodierung angeben, die durch hinzufügen von options-parameter zu org2ogr, aber anscheinend ist es nicht eine Wirkung haben.
ogr2ogr -f PostgreSQL PG:"host=localhost user=username dbname=dbname \
password=password options='-c client_encoding=latin1'" sourcefile;
Die Fehler ich erhalte, ist:
FEHLER 1: ALTER TABLE "soer_vd" SPALTE HINZUFÜGEN "målsætning" CHAR(10) FEHLER: ungültige byte-Sequenz für Kodierung "UTF8": 0xe56c73 HINWEIS: Dieser Fehler kann auch auftreten, wenn die byte-Reihenfolge entspricht nicht der Codierung erwartet von dem server kontrolliert, die durch "client_encoding". FEHLER 1: ALTER TABLE "soer_vd" SPALTE HINZUFÜGEN "påvirkning" CHAR(10) FEHLER: ungültige byte-Sequenz für Kodierung "UTF8": 0xe57669 HINWEIS: Dieser Fehler kann auch auftreten, wenn die byte-Reihenfolge entspricht nicht der Codierung erwartet von dem server kontrolliert, die durch "client_encoding". FEHLER 1: DER INSERT-Befehl für die neue Funktion ist fehlgeschlagen. FEHLER: ungültige byte-Sequenz für Kodierung "UTF8": 0xf8 HINWEIS: Dieser Fehler kann auch auftreten, wenn die byte-Reihenfolge entspricht nicht der Codierung erwartet von dem server kontrolliert, die durch "client_encoding".
Derzeit ist meine Quell-Datei ist eine Shape-Datei und ich bin mir ziemlich sicher, dass es Latin1 kodiert.
Was mache ich hier falsch und können Sie mir helfen?
Freundlichen GRÜßEN, Casper
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klingt wie es würde das client-encoding auf LATIN1. Was genau für Fehler bekommst du?
Nur für den Fall, ogr2ogr nicht übergeben Sie es zusammen, richtig ist, können Sie auch versuchen, setzen Sie die Umgebungsvariable
PGCLIENTENCODING
zulatin1
.Ich schlage vor, Sie überprüfen, dass Sie tatsächlich LATIN1. Einfach laufen
file
auf, es wird Ihnen eine gute Idee, vorausgesetzt, es ist tatsächlich konsistent innerhalb der Datei. Sie können auch versuchen, die Zusendung durchiconv
zu konvertieren, um Sie entweder LATIN1 oder UTF8.Magnus hat Recht und ich diskutieren hier die Lösung.
Habe ich gesehen, die option zu informieren PostgreSQL über die Zeichencodierung
options=’-c client_encoding=xxx’
, viele Orte, aber es scheint nicht zu haben keine Wirkung. Wenn jemand weiß, wie dieses Teil funktioniert, fühlen Sie sich frei, zu erarbeiten.Magnus vorgeschlagen, setzen Sie die Umgebungsvariable PGCLIENTENCODING LATIN1. Dies kann, so das Sie eine mailing-Liste, die ich abgefragt, erledigt sich durch ändern der Aufruf von ogr2ogr:
Diese nichts für mich. Was für mich gearbeitet war, vor dem Aufruf von ogr2ogr, zu:
Wäre es toll zu hören, mehr Informationen von erfahrenen Usern und ich hoffe, es kann anderen helfen 🙂
Derzeit OGR von GDAL führt keine Recodierung der Zeichendaten während der übersetzung zwischen Vektor-Formate. Das team hat sich vorbereitet RFC-23.1: Unicode-Unterstützung in OGR Dokument, das beschreibt die Unterstützung für die Aufzeichnung für OGR-Treiber. Die RFC-23 angenommen wurde und die core-Funktionalität wurde bereits veröffentlicht in GDAL-1.6.0. Allerdings, die meisten von OGR-Treiber nicht aktualisiert wurden, einschließlich Shapefile-Treiber.
Für die Zeit, die ich beschreiben würde OGR als Codierung Agnostiker und ignorant. Es bedeutet, OGR nicht nehmen, was er bekommt und schickt es raus, ohne irgendwie zu verarbeiten. OGR nutzt char-Typ zu manipulieren Textdaten. Dies ist gut zu behandeln multi-byte-kodierten strings (wie UTF-8) - es ist gerade ein einfacher Strom von bytes gespeichert als array von char-Elementen.
Ist es ratsam, dass die Entwickler von OGR-Treiber zurückkehren sollte UTF-8-kodierte strings von Attribut-Werten, aber diese Regel noch nicht weit verbreitet über OGR-Treiber, so dass diese Funktionalität nicht end-user noch bereit.
Müssen Sie schreiben Sie Ihre Befehlszeile wie diese :
SET PGCLIENTENCODING=LATIN1
hat nicht funktioniert. Diese Antwort hat mir geholfen.Löste ich dieses problem mit diesem Befehl:
Ich weiß nicht, ob dies die richtige Lösung, aber es funktionierte für mich.
Unter windows ein Befehl ist
Unter linux
oder
Zudem wird diese Diskussion mir helfen:
https://gis.stackexchange.com/questions/218443/ogr2ogr-encoding-on-windows-using-os4geo-shell-with-census-data
Unter windows
nicht mir keine Fehler, aber Sie ogr2ogr nicht funktioniert...ich brauche zum ändern der system-Variablen (z.B. System--> Erweiterte Systemeinstellungen--> Umgebungsvariablen -->Neue system-variable) starten Sie das system neu und führen Sie dann