将UTF-8 PostgreSQL DB转换为WIN-1255 Shapefile

时间:2009-12-13 13:11:51

标签: postgresql encoding utf-8 shapefile

我有一个包含希伯来语文本列的PostgreSQL \ PostGIS空间数据库。该系统在Ubuntu上运行,一切都可以完美地与UTF-8一起使用。

我正在尝试将一些表转储到shapefile中以获取只能读取Windows-1255字符串的Windows程序。不幸的是,pgsql2shp没有编码选项,虽然shp2pgsql有,所以Widnows程序读取UTF-8解析为Windows-1255给出了Gibberish。

我一直在尝试为表格列创建一个Windows-1255视图,但在没有破坏数据库的情况下找不到这样做。

如何转换表格的任何想法?

谢谢,

亚当

更新

我认为这个问题已经解决了(请参阅我自己的答案),我仍然会收到类似的随机错误:

ERROR:  character 0x9f of encoding "WIN1255" has no equivalent in "UTF8"

我想要的是某种省略功能:例如iconv-c标志,它不会复制没有等效的int目标编码的源字符。

3 个答案:

答案 0 :(得分:1)

如果你真的是指ASCII,你就不可能拯救希伯来字符。 ASCII只是设置为\x7F的7位字符。

那么这个Windows程序读取的是什么类型的字符串?如果它是ASCII或Latin-1,你永远不会得到希伯来语。更有可能的是,它是“当前的系统代码页”,在Windows中也称为“ANSI”,(误导但通常)。

如果是这种情况,则必须在运行Windows程序的每台计算机上将系统代码页设置为希伯来语(代码页1255)。我相信shp文件根本没有字符编码信息,因此shapefile只能在设置了此代码页的机器上正常工作(默认情况下仅在以色列语言环境中)。 (显然.dbf导出可以有一个附带的.cpg文件来指定编码,但我不知道您使用的程序是否支持该编码。)

然后你必须将数据导出为代码页1255,或者你最接近Postgres,ISO-8859-8。由于导出脚本似乎没有任何选项可以执行任何操作,只需从数据库中获取直接字节,因此您必须使用ISO-8859-8编码创建数据库并从UTF-8数据库传输所有数据到8859-8一个,或者直接通过查询,或者更容易,使用pgdumpall并将SQL加载到记事本中然后将其重新保存为希伯来语而不是UTF-8(将SQL DDL中列出的任何编码设置调整为你去了。)

我想知道是否可以说服Windows程序的制造商支持UTF-8?这是一个有点伤感与代码页特定的软件在本世纪被卡住。

答案 1 :(得分:0)

在bash脚本中:

select ENCODING in UTF8 WIN1252 WIN1255 ISO-8859-8;
do
        if [[ -n $ENCODING ]]; then
                export PGCLIENTENCODING=$ENCODING;
                break
        else
                echo 'Invalid encoding.'
        fi
done

export PGCLIENTENCODING=$ENCODING;语句可以解决问题。

答案 2 :(得分:0)

检查希伯来语编码表和页表, 您可以看到ISO-8859-8Windows-1255没有0x9f的映射。

您尝试转换的数据可能基于较旧的Codepage 862, DOS下希伯来语的代码页。 Codepage 862将代码0x9f映射到unicode字符 “带有钩子的拉丁文小写字母”,0x0192

您可以调查类似的“随机”错误,并决定数据中非Windows-1255代码的映射。