我正在尝试从数据库中获取和更新简体中文字符(GB2312),更新部分在weblogic 10.3 windows机器上工作正常,但它在weblogic 10.3 Solaris机器中失败(垃圾字符),但是获取和显示中文字符是在两种环境中都能正常工作
获取DAO
while (rs.next()) {
Base64 base64 = new Base64();
byte[] notesByte = base64.encode(rs
.getBytes("notes"));
}
用户界面(Android)
byte[] notes= Base64.decode(notesByteStr , Base64.DEFAULT);
notesText.setText(new String(notes, "GB2312")); // Displaying chines char
notesByte= Base64.encode(notesText.getText().toString().trim().getBytes("GB2312"), Base64.DEFAULT) // send to db
更新DAO
getSession().createSQLQuery(notesUpdateQuery)
.setParameter(0, new String(base64.decode(notesByte)))
.executeUpdate();
注意:源txt文件编码:UTF-8
答案 0 :(得分:1)
是的,请在您的更新DAO中查看此内容:
new String(base64.decode(notesByte))
使用平台默认编码将base64解码的字节数组转换为字符串。 base64解码的字节数组实际上是用GB2312中的文本编码 - 而不是的平台默认编码。
要正确转换,您需要在任何地方指定相同的编码:
new String(base64.decode(notesByte), "GB2312")