【问题标题】:Simplifies Chines(GB2312) character issue- Solaris Weblogic 10.3简化中文 (GB2312) 字符问题 - Solaris Weblogic 10.3
【发布时间】:2013-01-04 13:52:52
【问题描述】:

我正在尝试从数据库中获取和更新简体中文字符(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

【问题讨论】:

  • 我已经尽我所能回答了这个问题,但是“它失败了”没有给我们任何关于实际出了什么问题的信息。请阅读tinyurl.com/so-list
  • 实际上已更新为垃圾字符,例如?????
  • 你的意思是你实际上得到了问号,还是你得到了你没想到的其他字符?

标签: java utf-8 character-encoding weblogic gb2312


【解决方案1】:

是的,在你的更新 DAO 中看看这个:

new String(base64.decode(notesByte))

这是使用平台默认编码将base64解码的字节数组转换为字符串。 base64解码的字节数组实际上是用GB2312编码的文本——不是在平台默认编码中。

要正确转换,需要在各处指定相同的编码:

new String(base64.decode(notesByte), "GB2312")

【讨论】:

  • 我在我的 dao 中尝试了 new String(base64.decode(notesByte), "GB2312") 在两种环境中再次失败(垃圾包机)
  • 那么您需要提供更多信息和更多诊断信息。我在这个答案中发现的问题绝对是 a 问题,但显然不是全部。很难仅从这三个 sn-ps 中理解数据流 - 请编辑您的问题以准确解释发生了什么,以及您执行了哪些诊断。
  • 用 (new String(base64.decode(notesByte), "cp1252")) 解决的问题
  • @Arun:这听起来像是在转换为 base64 时正在使用 Windows-CP1252...您确定在哪里发生了这种情况吗? (如果可能的话,我强烈建议您更改它以使用 UTF-8...)
  • 问题是另一个 Windows 遗留应用程序正在使用该字段,我们只是该字段的消费者
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多