Java 简化中文(GB2312)字符问题-Solaris Weblogic 10.3
我正在尝试从数据库中获取和更新简体中文字符(GB2312),更新部分在weblogic 10.3 windows计算机中工作正常,但在weblogic 10.3 Solaris计算机中失败(垃圾字符),但在这两种环境中获取和显示中文字符工作正常 取刀Java 简化中文(GB2312)字符问题-Solaris Weblogic 10.3,java,utf-8,character-encoding,weblogic,gb2312,Java,Utf 8,Character Encoding,Weblogic,Gb2312,我正在尝试从数据库中获取和更新简体中文字符(GB2312),更新部分在weblogic 10.3 windows计算机中工作正常,但在weblogic 10.3 Solaris计算机中失败(垃圾字符),但在这两种环境中获取和显示中文字符工作正常 取刀 while (rs.next()) { Base64 base64 = new Base64(); byte[] notesByte = ba
while (rs.next()) {
Base64 base64 = new Base64();
byte[] notesByte = base64.encode(rs
.getBytes("notes"));
}
getSession().createSQLQuery(notesUpdateQuery)
.setParameter(0, new String(base64.decode(notesByte)))
.executeUpdate();
UI(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
while (rs.next()) {
Base64 base64 = new Base64();
byte[] notesByte = base64.encode(rs
.getBytes("notes"));
}
getSession().createSQLQuery(notesUpdateQuery)
.setParameter(0, new String(base64.decode(notesByte)))
.executeUpdate();
注意:源txt文件编码:UTF-8是的,请在更新DAO中查看以下内容:
new String(base64.decode(notesByte))
这是使用平台默认编码将base64解码字节数组转换为字符串。base64解码字节数组实际上是GB2312中的文本编码,而不是平台默认编码
要正确转换,需要在所有位置指定相同的编码:
new String(base64.decode(notesByte), "GB2312")
我已经尽我所能回答了这个问题,但“它失败了”并没有告诉我们到底出了什么问题。请阅读“使用垃圾字符实际更新”,如?????您的意思是您实际上得到了问号,还是得到了其他您不期望的字符?我在dao中尝试了新字符串(base64.decode(notesByte),“GB2312”),在这两种环境中都再次失败(垃圾宪章)。然后,您需要提供更多信息和更多诊断。我在这个答案中发现的问题肯定是个问题,但显然不是全部。仅从这三个片段很难理解数据流-请编辑您的问题以准确解释发生了什么,以及您执行了什么诊断。问题已通过(新字符串(base64.decode(notesByte),“cp1252”))解决@Arun:听起来好像转换为base64时使用了Windows-cp1252。。。你确定发生在哪里了吗?(我强烈建议您更改它,如果可能的话,使用UTF-8…)问题是又有一个windows遗留应用程序正在使用该字段,我们只是该字段的消费者