我有字符集转换问题:
我正在使用以下转换方法更新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);
在检索时,我使用以下代码转换&amp;显示:
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);
但是,系统在显示时显示乱码。有人可以帮我解码二进制存储中的日文字符吗?
答案 0 :(得分:3)
我对CharConverter
或AS400Text
一无所知,但像这样的代码几乎总是一个错误:
String s = new String(bytes);
使用平台默认编码将二进制数据转换为文本。
通常存储和检索应该经过相反的过程 - 所以当你使用字符串启动然后将其转换为字节,并在存储它时将其转换为AS400Text
对象,我希望你从AS400Text
对象开始,将其转换为字节数组,然后在获取时使用String
将其转换为CharConverter
。在这两种情况下你都在调用stringToByteArray
这一事实表明存在一些不妥之处。
(如果您告诉我们dbRemarks
是什么,以及您是如何获取的,也会有所帮助。)
我注意到检查了some documentation for AS400Text
后,我看到了这个:
由于最近字符转换例程的行为发生了变化,因此不再需要此系统对象,除非将AS400Text对象作为工具箱代理连接上的参数传递。
CharConverter
有类似的文档。你确定你真的需要经历这个吗?您是否尝试过直接存储字符串并直接检索它而不经过中间步骤?
答案 1 :(得分:1)
非常感谢Jon和Buck Calabro!
通过你的线索,我成功地采用了以下方法:
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实现相同的功能,并开始编码。