在我们的组织,我们处理GIS的内容在不同的文件格式。我需要把这些文件成PostGIS数据库,这样做是使用ogr2ogr.问题是,该数据库是UTF8编码,与文件可能有不同的编码。

我找到说明如何,我可以指定编码,通过增加一个选项参数org2ogr,但appearantly它没有效果。

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

错误我收到的是:

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

目前,我源文件是一个形状的文件,而我敢肯定,这是Latin1编码。

我做错了这里你能帮帮我吗?

亲切的问候,卡斯珀

有帮助吗?

解决方案

这听起来就像它将设置客户编码LATIN1.究竟是什么错误?

只是在情况ogr2ogr没有通过它沿着正确,你也可以尝试设置的环境变量 PGCLIENTENCODINGlatin1.

我建议您仔细检查,他们实际上是LATIN1.简单地运行 file 它会给你一个很好的想法,假定它实际上是一致的内部文件。你也可以试试送它通过 iconv 转换到LATIN1或UTF8.

其他提示

马格纳斯是对的,我将讨论的解决方案。

我已经看到的选择通知PostgreSQL关于字符编码, options=’-c client_encoding=xxx’, 用许多地方,但它似乎没有任何效果。如果有人知道这个部分工作时,随时加以阐述。

马格努斯建议设置的环境变量PGCLIENTENCODING到LATIN1.这可以根据一个邮件列表我查询,以完成通过修改呼吁ogr2ogr:

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

这并没有为我做任何事.什么工作对我来说是对之前的呼叫ogr2ogr,以便:

SET PGCLIENTENCODING=LATIN1

这将是巨大的,听到更多详细信息,从经验丰富的用户和我希望它可以帮助其他人:)

目前, OGRGDAL 不执行任何重新编码的字数据在翻译之间的矢量的格式。该团队已经准备 RFC23.1:Unicode支持在OGR 文件其中讨论了支持重新编码为OGR驱动程序。的 RFC23获得通过 和核心功能是已经公布在GDAL1.6.0.然而,大多数的OGR驱动程序没有更新,其中包括 要素的驱动程序.

暂时,我将描述OGR作编码不可知论者和无知。这意味着,OGR不会采取什么它得到及时发送出来没有任何处理。OGR使用炭类型操纵的文本数据。这是精于处理多字节的编码的字符串(如UTF-8)-它只是一个普通的字节流的存储为列炭元素。

它建议开发人员的OGR司机应该返回UTF-8encoded strings的属性值,然而该规则并没有被广泛采用跨OGR驱动程序,因而使这种功能不是最终用户准备好。

你需要写你的命令行这样的:

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

在窗户的命令是

设置PGCLIENTENCODING=LATIN1

在linux上

出口PGCLIENTENCODING=LATIN1

PGCLIENTENCODING=LATIN1

而且这次讨论帮助我

https://gis.stackexchange.com/questions/218443/ogr2ogr-encoding-on-windows-using-os4geo-shell-with-census-data

On windows

设置PGCLIENTENCODING=LATIN1ogr2ogr...

不给我任何错误,但ogr2ogr不作品...我需要改变系统变量(例如系统-->高级系统的设置-->环境变量-->新的系统变量)重新启动该系统和随后运行

ogr2ogr...

我解决了这个问题使用这种命令:

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

我不知道如果这是正确的解决方案,但它为我工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top