我使用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());
但它不起作用
答案 0 :(得分: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中的所有字符。
答案 1 :(得分:2)
如果设置正确,您不需要进行任何手动转换。 DB和JDBC驱动程序为您处理它。
您说您的数据库使用的是CCSID 37,这是美国,加拿大,荷兰,葡萄牙,巴西,新西兰,澳大利亚使用的英语。
要处理波兰语字符,您可能需要CCSID 870(每Language identifiers and associated default CCSIDs)
但是,每列都分配了CCSID。因此,该表中该列中的所有内容都需要位于一个或另一个CCSID中。
如果您需要同时存储英语和在同一个表中的同一列中进行波兰语,然后最好的选择是将列更改为Unicode。
或者,您可以将数据标记为"二进制" CCSID 65535,以便系统不会尝试转换它。您需要translate binary=false
,您的申请将负责了解哪些记录是英文的,哪些是波兰文。因此,您需要在记录中添加一些额外的标记字段。