String str = new String(new String("人间思乐坊").getBytes("GBK"), "UTF-8");
System.out.println(str);为什么在eclipse的控制台显示出来的是六个问号(??????)呢?

解决方案 »

  1.   

    GBK是两个字节的,UTF-8的中文是三个字节的。UTF-8解码时是一个一个字节处理的,出错了就用?号代替,有可能第一个字节就出错了,也有可能是第二,第三个,转换出的?个数是不定的。
      

  2.   

    String str = new String(new String("人间思乐坊").getBytes("ISO-8859-1"), "UTF-8");
    System.out.println(str);
    这样试试?
      

  3.   

    String str = new String(new String("人间思乐坊").getBytes("ISO-8859-1"), "UTF-8");
    System.out.println(str);此种方法应该正确
      

  4.   

    String str = new String(new String("人间思乐坊").getBytes("ISO-8859-1"), "UTF-8");
    System.out.println(str);
    这样输出的也是五个问号。。
      

  5.   

    知道了,应该是eclipse控制台的原因
      

  6.   

    我以为我已经说清楚了,原来大家没看明白啊
    new String(new String("人间思乐坊").getBytes("GBK"), "UTF-8");做了没事事情了呢
    new String("人间思乐坊") -- 建立一个字符串,字符串内容“人间思乐坊”,内存中的编码是unicode的。
    getBytes("GBK")  -- 把字符串按GBK编码,然后返回得到的编码,这时候是十个字节
    new String(XXX,"UTF-8"); -- 把得到的字节数组按UTF-8编码建立字符串,GBK与UTF-8根本是不兼容的,差异还非常大,这时候再按UTF-8编码当然就会得到一堆乱码了,至于为什么是六个问号,我上面已经说了