Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简化中文(GB2312)字符问题-Solaris Weblogic 10.3_Java_Utf 8_Character Encoding_Weblogic_Gb2312 - Fatal编程技术网

Java 简化中文(GB2312)字符问题-Solaris Weblogic 10.3

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

我正在尝试从数据库中获取和更新简体中文字符(GB2312),更新部分在weblogic 10.3 windows计算机中工作正常,但在weblogic 10.3 Solaris计算机中失败(垃圾字符),但在这两种环境中获取和显示中文字符工作正常

取刀

  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遗留应用程序正在使用该字段,我们只是该字段的消费者