0

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

获取 DAO

  while (rs.next()) {           
                    Base64 base64 = new Base64();
                    byte[] notesByte = base64.encode(rs
                            .getBytes("notes"));                
    }

用户界面(安卓)

     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

4

1 回答 1

1

嗯,是的,在你的 Update DAO 中看看这个:

new String(base64.decode(notesByte))

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

要正确转换它,您需要在任何地方指定相同的编码:

new String(base64.decode(notesByte), "GB2312")
于 2013-01-04T13:59:03.670 回答