可能是tomcat的问题,看看out默认字符集,网上有很多讨论乱码的

解决方案 »

  1.   

    看看你的 浏览器->编码 是不是“西欧字符(ISO)"?
      

  2.   

    Oracle中存放的是GBK是Char型,但是Java是按照流(Stream)方式来处理的,如果你没有设置流处理方式的话,他就会按照默认的处理方式进行。按照你的说法应该是你的默认字符集不是GBK了!否则不会出现这种情况。
      

  3.   

    我用System.getProperty("file.encoding")得到的值是GBK,win2k的默认语言设置是简体中文。我还要怎么检查呀?
      

  4.   

    我想可能是你的数据库里存储的时候是ISO8859-1的编码,
    String temp= e.toString(); //在这里temp是GBK编码,其实e应该是ISO8859
    temp=new String(temp.getBytes("GBK"),"ISO8859_1");//在这里把GBK转成ISO8859
    out.print(temp);//打印字符串出去。
      

  5.   

    那我还有疑问:
    1、如何判断数据库的编码方式?
    2、最后out.print(temp);的时候,temp应该是8859编码的,为什么能正常显示汉字?
      

  6.   

    1、如何判断数据库的编码方式?
    这个应该和数据库的设置有关2、最后out.print(temp);的时候,temp应该是8859编码的,为什么能正常显示汉字?
    你可以查一下各种编码的格式,如gbk,8859,utf等,8859编码应该是比较好的编码方式,他不会在编码过程中丢失任何信息。在你的几行程序里temp经历了一下过程:
    (从数据库取出的e编码未知)-->(toString() 把e按GBK解码并编码成temp)-->(在 new String()方法里把temp编码成8859)-->把temp输出如果你直接从数据库里把e取出来,按byte[]流的方式打印出来也是一样的。但是不要用任何从writer类继承出来的方法输出。他在中间会做些手脚