我遇到字符集转换问题:
我正在使用以下转换方法更新 iSeries 系统中 DB2 中的日语汉字字符:
AS400 sys = new AS400("<host>","username","password");
CharConverter charConv = new CharConverter(5035, sys);
byte[] b = charConv.stringToByteArray(5035, sys, "試験");
AS400Text textConverter = new AS400Text(b.length, 65535,sys);
在检索时,我使用以下代码进行转换和显示:
CharConverter charConv = new CharConverter(5035, sys);
byte[] bytes = charConv.stringToByteArray(5035, sys, dbRemarks);
String s = new String(bytes);
System.out.println("Remarks after conversion to AS400Text :"+s);
但是,系统显示时显示乱码。 有人可以帮我从二进制存储中解码日语字符吗?
好吧,我对
CharConverter
或 AS400Text
一无所知,但这样的代码几乎总是一个错误:
String s = new String(bytes);
使用平台默认编码将二进制数据转换为文本。
通常存储和检索应该经历相反的过程 - 因此,当您使用字符串开始,然后将其转换为字节,并在存储它时将其转换为
AS400Text
对象时,我希望您从一个 AS400Text
对象,将其转换为字节数组,然后在获取时使用 String
将其转换为 CharConverter
。事实上,您在这两种情况下都拨打 stringToByteArray
表明存在问题。
(如果您告诉我们
dbRemarks
是什么以及如何获取它也会有帮助。)
我确实注意到,在检查了一些
AS400Text
的文档后,我看到了这个:
由于字符转换例程的行为最近发生了变化,不再需要此系统对象,除非要将 AS400Text 对象作为 Toolbox 代理连接上的参数传递。
CharConverter
有类似的文档。您确定您真的需要经历这个吗?您是否尝试过直接存储字符串并直接检索它,而不经过中间步骤?
是的。 我犯了一个错误,在声明时没有对字符串进行编码。
我的问题是获取存储在 DB2 中的数据,将其转换为日语并提供在网页中进行编辑。 我从结果集中获取 dbRemarks。 我在帖子中错过了另一件事:
插入时,我将转换为如下文本:
String text = (String) textConverter.toObject(b);
PreparedStatement prepareStatementUpdate = connection.prepareStatement(updateSql);
prepareStatementUpdate.setString(1, text);
int count = prepareStatementUpdate.executeUpdate();
我可以使用此代码清晰地检索和显示:
String selectSQL = "SELECT remarks FROM empTable WHERE emp_id = ? AND dep_id=? AND join_date='2013-11-15' ";
prepareStatement = connection.prepareStatement(selectSQL);
prepareStatement.setInt(1, 1);
prepareStatement.setString(2, 1);
ResultSet resultSet = prepareStatement.executeQuery();
while ( resultSet.next() ) {
byte[] bytedata = resultSet.getBytes( "remarks" );
AS400Text textConverter2 = new AS400Text(bytedata.length, 5035,sys);
String javaText = (String) textConverter2.toObject(bytedata);
System.out.println("Remarks after conversion to AS400Text :"+javaText);
}
它在 JDBC 中工作得很好,但是为了与 JPA 一起工作,我需要转换为字符串以便在网页中编辑或存储在表中。 所以,我尝试过这种方法,但没有成功:
String remarks = resultSet.getString( "remarks" );
byte[] bytedata = remarks.getBytes();
AS400Text textConverter2 = new AS400Text(bytedata.length, 5035,sys);
String javaText = (String) textConverter2.toObject(bytedata);
System.out.println("Remarks after conversion to AS400Text :"+javaText);
根据您的线索,我成功地采用了以下方法:
String remarks = new String(resultSet.getBytes("remarks"),"SJIS");
byte[] byteData = remarks.getBytes("SJIS");
CharConverter charConv = new CharConverter(5035, sys);
String convertedStr = charConv.byteArrayToString(5035, sys, byteData);
我能够从字符串转换。 我计划用 JPA 实现同样的功能,并开始编码。