Frage

In unserer Organisation behandeln wir GIS Inhalt in verschiedenen Dateiformaten. Ich brauche diese Dateien in eine PostGIS Datenbank zu setzen, und das ist mit ogr2ogr getan. Das Problem ist, dass die Datenbank UTF8 codiert, und die Dateien möglicherweise eine andere Codierung haben.

Ich fand Beschreibungen, wie ich die Codierung durch Hinzufügen eines Option Parameter org2ogr angeben kann, aber appearantly hat es keine Auswirkung hat.

ogr2ogr -f PostgreSQL PG:"host=localhost user=username dbname=dbname \
password=password options='-c client_encoding=latin1'" sourcefile;

Der Fehler Ich erhalte ist:

ERROR 1: ALTER TABLE "soer_vd" ADD COLUMN "målsætning" CHAR(10)
ERROR: invalid byte sequence for encoding "UTF8": 0xe56c73
HINT: This error can also happen if the byte sequence does not match the 
encoding expected by the server, which is controlled by "client_encoding".

ERROR 1: ALTER TABLE "soer_vd" ADD COLUMN "påvirkning" CHAR(10)
ERROR: invalid byte sequence for encoding "UTF8": 0xe57669
HINT: This error can also happen if the byte sequence does not match the 
encoding expected by the server, which is controlled by "client_encoding".

ERROR 1: INSERT command for new feature failed.
ERROR: invalid byte sequence for encoding "UTF8": 0xf8
HINT: This error can also happen if the byte sequence does not match the 
encoding expected by the server, which is controlled by "client_encoding".

Derzeit meine Quelldatei ist eine Form-Datei und ich bin mir ziemlich sicher, dass es Latin1 codiert werden.

Was mache ich falsch hier und können Sie mir helfen?

Mit freundlichen Grüßen Casper

War es hilfreich?

Lösung

Das klingt wie es die Kodierung des Clients auf LATIN1 gesetzt würde. Genau das, was Fehler bekommen Sie?

Für den Fall, ogr2ogr es nicht zusammen richtig nicht passiert, können Sie auch versuchen, die Umgebungsvariable PGCLIENTENCODING zu latin1 Einstellung.

Ich schlage vor, Sie überprüfen, dass sie tatsächlich LATIN1 sind. Einfach file eine gute Idee, die darauf ausgeführt werden Sie, es ist tatsächlich konsistent innerhalb der Datei übernehmen. Sie können auch versuchen, es durch iconv sendet es entweder LATIN1 oder UTF8 zu konvertieren.

Andere Tipps

Magnus ist richtig, und ich werde die Lösung hier diskutieren.

Ich habe die Option gesehen PostgreSQL über Zeichenkodierung, options=’-c client_encoding=xxx’, verwendet viele Orte zu informieren, aber es scheint keine Wirkung zu haben. Wenn jemand weiß, wie dieser Teil funktioniert, fühlen Sie sich frei zu erarbeiten.

Magnus vorgeschlagen, um die Umgebungsvariable PGCLIENTENCODING auf LATIN1 einzustellen. Dies kann nach einer Mailing-Liste I abgefragt, durch Modifizieren der Aufruf an ogr2ogr getan werden:

ogr2ogr -–config PGCLIENTENCODING LATIN1 –f PostgreSQL 
PG:”host=hostname user=username dbname=databasename password=password” inputfile

Das hat nichts für mich. Was für mich gearbeitet wurde, um, vor dem Aufruf von ogr2ogr, zu:

SET PGCLIENTENCODING=LATIN1

Es wäre toll, mehr Details von erfahrenen Benutzern zu hören, und ich hoffe, dass es andere helfen kann:)

Derzeit OGR von GDAL führt keine Umcodierung von Zeichendaten während der Übersetzung zwischen Vektorformate. Das Team hat bereit RFC 23.1: Unicode-Unterstützung in OGR Dokument, das für OGR Unterstützung Umkodierung diskutiert Fahrer. Die 23 RFC wurde angenommen und die Kernfunktionalität war bereits in GDAL 1.6.0 freigegeben. Allerdings haben die meisten von OGR-Treiber nicht aktualisiert worden ist, einschließlich Shape-Datei Treiber .

Zur Zeit ist, würde ich OGR beschreiben als kodieren, Agnostiker und unwissend. Es bedeutet, OGR nimmt was er bekommt und sendet sie ohne Verarbeitung aus. OGR verwendet char-Typ Textdaten zu manipulieren. Das ist gut Mehrbyte-codierte Zeichenfolge zu verarbeiten (wie UTF-8) -. Es ist nur ein einfacher Strom von Bytes als Array von char Elementen gespeichert

Es wird empfohlen, dass die Entwickler von OGR Treiber sollten UTF-8 kodierten Strings von Attributwerten zurückzukehren, aber diese Regel wurde nicht weit über OGR Fahrer angenommen, wodurch diese Funktionalität nicht Endabnehmer noch bereit.

Sie benötigen eine Befehlszeile wie folgt schreiben:

PGCLIENTENCODING=LATIN1 ogr2ogr -f PostgreSQL PG:"dbname=...

Ein Fenster ist ein Befehl

  

SET PGCLIENTENCODING = LATIN1

Unter Linux

  

export PGCLIENTENCODING = LATIN1

oder

  

PGCLIENTENCODING = LATIN1

Darüber hinaus diese Diskussion Hilfe mir:

https: //gis.stackexchange .com / Fragen / 218.443 / ogr2ogr-Encoding-on-Fenster-mit-os4geo-shell-mit-Census-Daten

Unter Windows

  

SET PGCLIENTENCODING = LATIN1 ogr2ogr ...

Sie gibt mir keine Fehler, aber ogr2ogr nicht funktioniert ... Ich muß die Systemvariable ändern (zB System -> Erweiterte Systemeinstellungen -> Umgebungsvariablen -> Neuer Systemvariable) das System neu starten und dann laufen

  

ogr2ogr ...

Ich löste dieses Problem mit diesem Befehl:

pg_restore --host localhost --port 5432 --username postgres --dbname {DBNAME} --schema public --verbose "{FILE_PATH to import}"

Ich weiß nicht, ob dies die richtige Lösung ist, aber es funktioniert für mich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top