编码转化
try {
String _str = new String(str.getBytes("gb2312"),"utf-8" );
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
乱码转化和你的机子本身的编码。还是编译器的编码都有关,在解决了问题后好好找到问题的根本。这样以后解决就有把握了。

解决方案 »

  1.   

    str.getBytes("gb2312")得到的是字符串按照gb2312编码后的字节数组,所以如果系统编码是gb2312,那么你得到str时已经是把gb2312的缓冲按照UNICODE编码后的结果了,所以这样是不对的。
    因为内存中的字符串是UNICODE的编码,所以要还原,就要用str.getBytes()或者str.getBytes("UNICODE"),然后再将得到的字节数组(比如叫做bytes)按照GB2312构造成字符串,就是new String(bytes, "GB2312")。
      

  2.   

    具体到楼主的问题,这里应该用GB2312或者GBK作为构造输入流的参数,等到输出字节流的时候使用UTF-8构造输出流。
    字符串在内存中一律是UNICODE,而Reader使用的字符集,含义是通过这个字符集来“解码”得到的字节数据。