操作系统:日文版Windows XP
数据库:日文版ACCESS,里面存有中文、英文、日文数据,在OFFICE软件中可以正常显示而不出现乱码
开发语言:JAVA
开发平台:Eclipse 3.3,Tomcat 5.5
问题:使用JSP读取数据库中的数据,英文、日文可以正常显示,但是中文是乱码
备注:<%@ page language="java" import="java.sql.*" contentType="text/html; charset=UNICODE"
         pageEncoding="UNICODE"%>  并且
      <meta http-equiv="Content-Type" content="text/html; charset=UNICODE">已经尝试将UNICODE换成GBK或者GB2312或BIG5均未能解决乱码问题,望高人指点,不胜感激!

解决方案 »

  1.   

    试下pageEncoding="UTF-8",如不行可以用new  String转下
    String str = "中文";
    new  String(str.getBytes("ISO8859-1"),"UTF-8");
    补充下,确定你数据可里的中文在出数据库的时候不是乱的?
      

  2.   

    试下pageEncoding="UTF-8",如不行可以用new  String转下
    String str = "中文";
    new  String(str.getBytes("ISO8859-1"),"UTF-8");
    补充下,确定你数据可里的中文在出数据库的时候不是乱的?
      

  3.   

    对,我确定数据库中的数据都不是乱码,用ACCESS打开是可以正常显示的。
    唉,还是不行啊!三个地方我全都换成UTF-8也不行,而且用new String转码也不成功,得到一堆的问号。
      

  4.   

    我还试过
    new String(str.getBytes("MS932"),"UTF-8"【或者UNICODE或者GBK等编码】) ;
    结果都是乱码,愁死我了!
    日语的系统真是烦人!
      

  5.   

    new String(str.getBytes("UTF-8"),"MS932"); 
    new String(str.getBytes("ISO8859-1"),"MS932"); 
    试试?
      

  6.   

    有一个特点我注意到了:
    页面上能够正常显示某些汉字,比如“星野宋”,这些汉字都是日语里也存在的汉字。
    另外一些汉字,比如“蓝”字,就无法显示。
    我觉得程序从ACCESS数据库中取数据时进行了默认的数据转码,可能将这些都转成了日语的编码,因为我的数据库连接驱动和连接字段分别为:
    String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
    String sConnStr = "jdbc:odbc:OnlineMusic";
    用的都是JDBC到ODBC再到数据库,由于系统的默认语言是日语的,所以我怀疑可能数据在流经这些节点的时候被系统自动地给转码了。意思就是说,可能问题出在JDBC与ODBC上,可能它们会根据当前系统配置自动地做一些转码动作。小弟是个菜鸟,刚学JAVA不到一星期,对于这些驱动方面的知识甚是缺乏,望高人指点!
      

  7.   

    还是不行啊,真是郁闷!
    谁有编码方面的书籍啊?
    我曾经做过IBM大型机方面的系统,在主机平台(DB2 for MainFrame,EDCBIC编码)与开放平台(JAVA程序,UNICODE编码)相互连接时,对汉字数据的处理就出现了乱码,最后无奈硬着头皮研究了一个星期,终于找到了EBCDIC与GBK之间的编码规律,最后手动编写算法完成了两种编码之间的转换。那个时候也是出于无奈,因为有关EBCDIC编码方面的资料太少了(IBM大型机方面的资料基本上都是只有IBM自个儿出,当时也找过IBM的技术指导,但是他们没能给出个合理的答案,可能是因为咱不是什么重要人物吧)。但是这次不一样,都是些常用的平台,资料应该很多,这方面的牛人也应该很多。
    望高人指点迷津!
      

  8.   

    问题出在JDBC与ODBC上,没错,可惜access没太用过
    换SQL Server吧,把字段类型设置成nvarchar的,页面UTF-8,不带有乱码的
      

  9.   


    private Object convert2MS932(String _srcString) {        StringBuilder _resultString = null;        if (_srcString == null) {
                return null;
            }        for (int i = 0; i < _srcString.length(); i++) {            switch (_srcString.charAt(i)) {            // U+301Cの判定
                case '\u301C':                if (_resultString == null) {
                        // 受け取った文字列からStringBuilderインスタンスを作成
                        _resultString = new StringBuilder(_srcString);
                    }                // バイトコード変換(U+301CからU+FF5Eへ)
                    _resultString.setCharAt(i, '\uFF5E');                // ログ出力
                    if (log.isDebugEnabled()) {
                        log.debug("U+301Cが検出されU+FF5Eに変換しました");
                    }                break;            // それ以外の場合
                default:
                    break;            }        }        // 結果の返却
            if (_resultString == null) {
                // 該当文字が検出されなかった場合、文字列をそのまま返却
                return _srcString;
            } else {
                // 該当文字が検出された場合、バイトコードを変更した文字列を返却
                return _resultString.toString();
            }
        }用这个方法试试
      

  10.   

    看了看大侠的代码,意思应该是将字符串中的 '\u301C' 替换成 '\uFF5E' ,查资料得知 '\u301C' 应该是 SJIS 编码中的全角波浪线, '\uFF5E' 应该是 MS932 编码中的全角波浪线,这段代码应该是在做这两种编码的 全角波浪线 的转码,理论上好像跟我遇到的问题问题不大啊?
      

  11.   

    我目前是在自己的机子上调试,客户端和服务器都是我自己的机子,都是日语Win XP系统。
      

  12.   

    我目前是在自己的机子上调试,客户端和服务器都是我自己的机子,都是日语Win XP系统。
      

  13.   

    日文数据库是按日文编码存的,所以你要用日文编码来取。charset=EUC或shift-jis试试
      

  14.   

    SQL Server还没有尝试,可能会好点吧,因为微软有专门的驱动。但是ACCESS这边我还不想放弃。
    不知道大侠有没有关于JDBC、ODBC方面的资料?能不能自己对所使用的驱动进行配置啊?