我使用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());但它不起作用
发布于 2016-05-24 21:05:33
CCSID 37是英语,不包含某些波兰语字符。波兰语CCSID是1153,或870 (不含欧元符号)。
您可以在此处看到CCSID37(字符集697)中包含的符号:ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CS00697.pdf
您可以在此处看到CCSID1153(字符集1375)中包含的符号:ftp://ftp.software.ibm.com/software/globalization/gcoc/attachments/CS01375.pdf
如果数据库字段包含CCSID 37,您将无法存储1153中缺少CCSID的字符。将转换常用字符。您可以尝试将数据库更改为使用UTF-16或CCSID1200。它包含CCSID 37和CCSID 1153中的所有字符。
发布于 2016-05-24 21:02:57
如果设置正确,您应该不需要进行任何手动转换。DB和JDBC驱动程序会为您处理它。
您说您的数据库使用的是CCSID37,这是美国、加拿大、荷兰、葡萄牙、巴西、新西兰和澳大利亚使用的英语。
要处理波兰语字符,您可能需要CCSID870(每个Language identifiers and associated default CCSIDs)
但是,CCSID是按列分配的。因此,该表中该列中的所有内容都需要位于一个或另一个CCSID中。
如果您需要将英语和波兰语都存储在同一个表的同一列中,那么最好的选择是将这些列更改为Unicode。
或者,您可以将数据标记为“二进制”CCSID 65535,这样系统就不会尝试转换它。您将需要translate binary=false,并且您的应用程序将负责知道哪些记录是英语的,哪些是波兰语的。因此您需要在记录中添加一些额外的标志字段。
https://stackoverflow.com/questions/37409928
复制相似问题