0

我使用 jt400 从 as400 - db2 上的数据库中获取数据。

我的数据库使用 ccsid 37 编码。我只有波兰语字母有问题。如何强制 jt400 使用正确的编码?

我试过了

jdbc:as400://MY_SYSTEM/LIBRARY;translate binary=true

AS400Text converer = new AS400Text(stringFromDb.length(), 37);
String stringAfterConversion = converter.toObject(stringFromDb.getBytes());

但它不起作用

4

2 回答 2

3

CCSID 37 是英语,不包含某些波兰语字符。波兰语 CCSID 是 1153 或 870(没有欧元符号)。

您可以在此处查看 CCSID 37(字符集 697)中包含的符号:ftp: //ftp.software.ibm.com/software/globalization/gcoc/attachments/CS00697.pdf

您可以在此处查看 CCSID 1153(字符集 1375)中包含的符号:ftp: //ftp.software.ibm.com/software/globalization/gcoc/attachments/CS01375.pdf

如果数据库字段包含 CCSID 37,您将无法存储 1153 中缺少 CCSID 的字符。通用字符将被转换。您可以尝试将数据库更改为使用 UTF-16 或 CCSID 1200。其中包含 CCSID 37 和 CCSID 1153 中的所有字符。

于 2016-05-24T13:05:33.350 回答
2

如果设置正确,您不需要进行任何手动转换。DB 和 JDBC 驱动程序为您处理它。

您说您的数据库正在使用 CCSID 37,这是在美国、加拿大、荷兰、葡萄牙、巴西、新西兰、澳大利亚使用的英语。

要处理波兰语字符,您可能需要 CCSID 870(每个语言标识符和关联的默认 CCSID

但是,CCSID 是按列分配的。因此,该表中该列中的所有内容都需要位于一个或另一个 CCSID 中。

如果您需要将英语和波兰语存储在同一张表的同一列中,那么最好的选择是将列更改为 Unicode。

或者,您可以将数据标记为“二进制”CCSID 65535,以便系统不会尝试转换它。您需要translate binary=false 并且您的应用程序将负责了解哪些记录是英语的,哪些是波兰语的。因此,您需要在记录中添加一些额外的标志字段。

于 2016-05-24T13:02:57.223 回答