推荐下次楼主发贴前先仔细搜一下知识库
http://dev.csdn.net/user/whodsow
这里有很详尽的解释

解决方案 »

  1.   

    java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式 
      是使用字节流的。 因此java要对这些字节流经行转化。char是unicode的,而byte是字节. 
      java中byte/char互转的函数在sun.io的包中间有。其中bytetocharconverter类是中调度, 
      可以用来告诉你,你用的convertor。其中两个很常用的静态函数是 
       public static bytetocharconverter getdefault() ; 
       public static bytetocharconverter getconverter(string encoding); 
      如果你不指定converter,则系统会自动使用当前的encoding,gb平台上用gbk,en平台上用 
      8859_1 
       
      我们来就一个简单的例子: 
         "你"的gb码是:0xc4e3 ,unicode是0x4f60 
         你用: 
         --encoding="gb2312"; 
         --byte b[]={(byte)'\u00c4',(byte)'\u00e3'}; 
         --convertor=bytetocharconverter.getconverter(encoding); 
         --char [] c=converter.convertall(b); 
         --for(int i=0;i     --{ 
         -- system.out.println(integer.tohexstring(c[i])); 
         --} 
         --打印出来是0x4f60 
         --但是如果使用8859_1的编码,打印出来是 
         --0x00c4,0x00e3 
         ----例1 
         反过来: 
         --encoding="gb2312"; 
            char c[]={'\u4f60'}; 
            convertor=bytetocharconverter.getconverter(encoding); 
         --byte [] b=converter.convertall(c); 
         --for(int i=0;i     --{ 
         -- system.out.println(integer.tohexstring(b[i])); 
         --} 
          --打印出来是:0xc4,0xe3 
          ----例2 
          --如果用8859_1就是0x3f,?号,表示无法转化      -- 
          很多中文问题就是从这两个最简单的类派生出来的。而却有很多类   
      不直接支持把encoding输入,这给我们带来诸多不便。很多程序难得用encoding 
      了,直接用default的encoding,这就给我们移植带来了很多困难 
      

  2.   

    //以下是ntzls给我发的短消息,:)多谢各位,明白些了
    str.getBytes("8859_1")返回字节数组,将原str的UNICODE码(16位,JAVA存储方式)通过8859-1进行编码,8859-1不支持中文(8位)所以此时print的是乱码。
    new String(byte[],"decode")是将字节数组通过decode进行解码,但需保证byte[]是按decode编码的,否则矛盾了,得不到正确的字符。
    new String(str.getBytes("8859_1"),"gbk");//如果str中含中文能正确输出吗?
    如是从流中读取的是按其他中文方式编码则
    new String(b[],"其他中文编译方式");
    一般中文操作系统默认编码为GBK。8859-1 (Latin-1) 
    Latin-1 覆盖大多数的西欧语言,比如阿尔巴尼亚, 加泰罗尼亚语, 丹麦, 荷兰,英语,法罗群岛,芬兰,法语,德语,加利西亚,爱尔兰,冰岛, 意大利,挪威,葡萄牙,西班牙和瑞典。缺少荷兰的 ij连字(i与j合字) ,法国的 oe(o与e合字)和旧风格的',,' 而德语中``(这样的)引号是可以的。
      几乎所有的WEB容器在其内部默认的字符编码格式都是以ISO-8859-1为默认值的,同时,几乎所有的浏览器在传递参数时都是默认以UTF-8的方式来传递参数的。所以,虽然我们的Java源文件在出入口的地方指定了正确的编码方式,但其在容器内部运行时还是以ISO-8859-1来处理的。
      

  3.   

    楼上的众多兄弟把问题说得比较清楚了,其实,你还可以在tomcat(如果你用的是这的话)可以在web.xml中改一下字符,就能解决这个问题