将UTF-8 PostgreSQL DB转换为WIN-1255形状文件

将UTF-8 PostgreSQL DB转换为WIN-1255形状文件,postgresql,encoding,utf-8,shapefile,Postgresql,Encoding,Utf 8,Shapefile,我有一个PostgreSQL\PostGIS空间数据库,其中包含希伯来文文本列。该系统在Ubuntu上运行,所有东西都能完美地与UTF-8配合使用 我正在尝试将一些表转储到一个只能读取Windows-1255字符串的Windows程序的shapefile中。不幸的是,虽然有,但没有编码选项,所以Widnows程序读取UTF-8,解析为Windows-1255,发出胡言乱语 我一直在尝试为表列创建一个Windows-1255视图,但没有找到不损坏数据库的方法 你知道如何转换表格吗 谢谢 亚当 更新

我有一个PostgreSQL\PostGIS空间数据库,其中包含希伯来文文本列。该系统在Ubuntu上运行,所有东西都能完美地与UTF-8配合使用

我正在尝试将一些表转储到一个只能读取Windows-1255字符串的Windows程序的shapefile中。不幸的是,虽然有,但没有编码选项,所以Widnows程序读取UTF-8,解析为Windows-1255,发出胡言乱语

我一直在尝试为表列创建一个Windows-1255视图,但没有找到不损坏数据库的方法

你知道如何转换表格吗

谢谢

亚当

更新:

我认为这个问题已经解决了(见我自己的答案),因为我仍然会遇到如下随机错误:

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

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

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

那么这个Windows程序读取什么样的字符串呢?如果是ASCII,或者拉丁语-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?在本世纪,使用特定于代码页的软件有点悲哀。

在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

导出PGCLIENTENCODING=$ENCODING语句就可以了。

检查希伯来语编码表和页面表, 您可以看到这一点,并且没有
0x9f
的映射

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


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

+1谢谢,已更正为windows-1255。我原以为将整个DB转换成ISO-8859-8,但这似乎很疯狂,因为我所需要的只是转换一列。如上所述,这是我的旧答案,它停止了工作。