1

我将 Informix 数据库配置为:

DB_LOCALE=pl_pl.CP1250

(使用 Windows CP1250 字符编码的波兰语区域设置)。

在这个数据库中有一个表,VARCHAR其中大部分数据以 CP1250 编码,但一些记录以 UTF-8 编码。我怀疑它们是由 ODBC 插入并错误编码的 .csv 导入。

当我使用 ODBC 时,可以获取此错误编码的数据。它看起来不漂亮:

nazw:┼?UKASIK

但可以显示并且最终用户可以编辑此类数据。那些“奇怪”的字符是 'Ł' 字母的 UTF-8 字符。

当我使用本机 JDBC 驱动程序时,我无法获取此类数据。而不是String我得到异常:

JDBC Error: -79783
IX000
Kodowanie lub zestaw kodów znaków nie są obsługiwane.

英文解释:

-79783 Encoding or code set not supported
Explanation: The encoding or code set entered in the DB_LOCALE or CLIENT_LOCALE variable is not valid.

我在 Jython 中创建了使用本地 JDBC 驱动程序和 JDBC-ODBC 桥连接到数据库的测试程序。我只有本机驱动程序才有例外。我还尝试通过其他 JDBC getXXX() 方法来获取这些数据,byte[]Stream它们也引发了异常。我使用 JDBC URL 作为:

jdbc:informix-sqli://test-informix:9088/test:informixserver=ol_testifx;DB_LOCALE=pl_PL.CP1250;CLIENT_LOCALE=pl_PL.CP1250;charSet=CP1250

服务器版本:IBM Informix Dynamic Server Version 11.50.FC4

原生驱动:3.70.JC5DE; major: 3; minor: 70

JDBC-ODBC 桥使用的 ODBC 驱动程序:2.0001 (3.70.TC5DE); major: 2; minor: 1

我的问题是:

有没有办法得到这种错误编码的数据?我想看看 '?' 字符而不是错误编码的字符。我不想要例外,因为它们不允许最终用户查看和纠正错误编码的数据。

4

2 回答 2

1

I got help from IBM Polska and they have found that JDBC connect string can be extended by IFX_USE_STRENC=true: http://www-01.ibm.com/support/docview.wss?uid=swg21502902

This allowed JDBC to fetch wrongly encoded data. Now I can read:

nazw:Przemysław
nazw:Ĺ?UKASIK

(2nd record is with Polish letter Ł in wrong encoding)

Thank you IBM Polska!

于 2013-02-01T09:27:48.357 回答
0
于 2013-02-01T07:06:47.413 回答