Domanda

Nella nostra organizzazione, gestiamo contenuti GIS in diversi formati di file. Ho bisogno di mettere questi file in un database PostGIS, e che viene fatto usando ogr2ogr. Il problema è, che il database è codificato UTF8, ei file potrebbe avere una codifica diversa.

ho scoperto le descrizioni di come posso specificare la codifica con l'aggiunta di un parametro di opzioni per org2ogr, ma appearantly non ha un effetto.

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

L'errore che ricevo è:

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".

Al momento, il mio file di origine è un file di forma e sono abbastanza sicuro, che sia Latin1 codificato.

Che cosa sto facendo di sbagliato qui e mi potete aiutare?

Cordiali saluti, Casper

È stato utile?

Soluzione

Questo non suona come sarebbe impostare la codifica del client per LATIN1. Esattamente quello che l'errore si ottiene?

Nel caso in cui ogr2ogr non passa lungo correttamente, si può anche provare a impostare l'ambiente PGCLIENTENCODING variabile latin1.

Vi suggerisco di doppio controllo che essi sono in realtà LATIN1. Semplicemente esecuzione file su di esso vi darà una buona idea, ammesso che sia effettivamente coerente all'interno del file. Potete anche provare a inviarlo attraverso iconv per convertirlo in uno LATIN1 o UTF8.

Altri suggerimenti

Magnus è giusto e io discuterà la soluzione qui.

ho visto la possibilità di informare su PostgreSQL codifica dei caratteri, options=’-c client_encoding=xxx’, utilizzare molti luoghi, ma non sembra avere alcun effetto. Se qualcuno sa come questa parte sta lavorando, sentitevi liberi di elaborare.

Magnus consiglia di impostare l'ambiente PGCLIENTENCODING variabile LATIN1. Questo può, in base ad una mailing list ho chiesto, essere fatto modificando la chiamata a ogr2ogr:

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

Questo non ha fatto nulla per me. Che cosa ha funzionato per me è stato quello di, prima della chiamata a ogr2ogr, a:

SET PGCLIENTENCODING=LATIN1

Sarebbe bello sentire ulteriori dettagli da parte degli utenti esperti e spero che possa aiutare gli altri:)

Al momento, OGR da GDAL non esegue alcuna ricodifica dei dati di caratteri durante la traduzione tra formati vettoriali. Il team ha preparato RFC 23.1: supporto Unicode in OGR documento che illustra il supporto di ricodifica per OGR autisti. RFC 23 è stato adottato e la funzionalità di base era già uscito nel GDAL 1.6.0. Tuttavia, la maggior parte dei piloti OGR non sono stati aggiornati, tra cui Shapefile conducente .

Per il momento, vorrei descrivere OGR come la codifica agnostico e ignorante. Significa, OGR non prendere ciò che si fa e lo invia fuori senza alcuna elaborazione. OGR utilizza tipo char per manipolare i dati testuali. Questo va bene per gestire multi-byte stringhe codificate (come UTF-8) -. È solo un flusso normale di byte memorizzati come array di elementi char

E 'consigliabile che gli sviluppatori di driver OGR dovrebbe tornare stringhe UTF-8 codifica dei valori degli attributi, ma questa regola non è stata ampiamente adottata in tutto i driver OGR, rendendo così questa funzionalità non l'utente finale ancora pronto.

Hai bisogno di scrivere la riga di comando in questo modo:

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

Su Windows un comando è

  

SET PGCLIENTENCODING = LATIN1

Su Linux

  

export PGCLIENTENCODING = LATIN1

o

  

PGCLIENTENCODING = LATIN1

Inoltre, questa discussione mi aiuti:

https: //gis.stackexchange com / domande / 218.443 / ogr2ogr-codifica-on-finestre-utilizzando-os4geo-shell-con-census-dati

Su Windows

  

SET PGCLIENTENCODING = LATIN1 ogr2ogr ...

non mi danno alcun errore, ma non lo fanno ogr2ogr opere ... Ho bisogno di cambiare la variabile di sistema (ad esempio Sistema -> Impostazioni di sistema avanzate -> Variabili d'ambiente -> Nuova variabile di sistema) riavviare il sistema e quindi eseguire

  

ogr2ogr ...

Ho risolto questo problema utilizzando questo comando:

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

Non so se questa è la soluzione giusta, ma ha funzionato per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top