编码问题ogr2ogr和Postgis/PostgreSQL数据库
-
21-09-2019 - |
题
在我们的组织,我们处理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没有通过它沿着正确,你也可以尝试设置的环境变量 PGCLIENTENCODING
要 latin1
.
我建议您仔细检查,他们实际上是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
这将是巨大的,听到更多详细信息,从经验丰富的用户和我希望它可以帮助其他人:)
目前, OGR 从 GDAL 不执行任何重新编码的字数据在翻译之间的矢量的格式。该团队已经准备 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
而且这次讨论帮助我
On windows
设置PGCLIENTENCODING=LATIN1ogr2ogr...
不给我任何错误,但ogr2ogr不作品...我需要改变系统变量(例如系统-->高级系统的设置-->环境变量-->新的系统变量)重新启动该系统和随后运行
ogr2ogr...
我解决了这个问题使用这种命令:
pg_restore --host localhost --port 5432 --username postgres --dbname {DBNAME} --schema public --verbose "{FILE_PATH to import}"
我不知道如果这是正确的解决方案,但它为我工作。