java - 通过 native JDBC Informix 驱动程序获取错误编码的数据

标签 java jdbc encoding informix

我配置了 Informix 数据库:

DB_LOCALE=pl_pl.CP1250

(使用 Windows CP1250 字符编码的波兰语语言环境)。

在此数据库中有一个包含 VARCHAR 列的表,其中大部分数据采用 CP1250 编码,但某些记录采用 UTF-8 编码。我怀疑它们是通过 ODBC 插入的并且错误地编码了 .csv 导入。

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

nazw:┼?UKASIK

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

当我使用 native 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 中创建了测试程序,该程序使用 native JDBC 驱动程序和 JDBC-ODBC 桥连接到数据库。我只在 native 驱动程序中遇到异常。我还尝试通过其他 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 版本 11.50.FC4

native 驱动程序:3.70.JC5DE;专业:3;未成年人:70

JDBC-ODBC 桥使用的 ODBC 驱动程序:2.0001 (3.70.TC5DE);专业:2;次要:1

我的问题是:

有什么方法可以获取这种错误编码的数据吗?我想看看 '?'字符而不是错误编码的字符。我不想要异常(exception),因为它们不允许最终用户查看和更正错误编码的数据。

最佳答案

我从 IBM Polska 获得了帮助,他们发现 JDBC 连接字符串 可以通过 IFX_USE_STRENC=true 扩展:http://www-01.ibm.com/support/docview.wss?uid=swg21502902

这使得 JDBC 能够获取错误编码的数据。现在我可以阅读:

nazw:Przemysław
nazw:Ĺ?UKASIK

(第二条记录的波兰语字母 Ł 编码错误)

谢谢 IBM Polska!

关于java - 通过 native JDBC Informix 驱动程序获取错误编码的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14621963/

相关文章:

Java,while 循环内部带有扫描器并作为语句

java - jdbc 不运行 SQL Developer 运行的内容

ios - 将字节转换为字符串不起作用

vba - VBA IDE 中长字符串的格式

python - 对象不匹配

java - 如何将 "formatted double(String)"转换为 double?

java - 显示输出不符合预期

java - Android 6.x 中的权限

java - 查找在 Java 代码中保持打开状态的数据库连接的最佳方法是什么?

java - 关于 Hibernate 和 Informix 的问题