2

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

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

我一直在尝试为表列创建一个 Windows-1255 视图,但发现在不破坏数据库的情况下无法做到这一点。

任何想法如何转换表格?

谢谢,

亚当

更新:

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

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

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

4

3 回答 3

1

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

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

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

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

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

于 2009-12-13T14:43:39.583 回答
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;声明起到了作用。

于 2010-01-07T07:44:02.403 回答
0

检查希伯来语编码表和页表,您可以看到ISO-8859-8Windows-1255没有针对0x9f.

您尝试转换的数据可能基于旧的Codepage 862,这是 DOS 下的希伯来语代码页。 Codepage 862将代码映射0x9f到 unicode 字符“LATIN SMALL LETTER F WITH HOOK” 0x0192,.

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

于 2011-02-11T13:30:08.287 回答