最近遇到一道题目,要写出将GB2312编码的字符串转换为ISO-8859-1编码的字符串的方法,在网上搜了下,发现这个问题没有很好的解答,用new String(GBstr.getBytes("GB2312"),"ISO-8859-1");得到的还是问号,就是无法识别的字符,如果中文本身就没有对应的ISO-8859-1编码字符,那转换还有什么意义呢?如何可以转换,那如何把转换过去的ISO-8859-1编码的字符再转回GB2312格式的中文字符呢?请知道的朋友帮忙解答下,谢谢!

解决方案 »

  1.   

    编码转换就是
    new String(GBstr.getBytes("原有编码"),"目标编码");
    如果你只有原有编码的话就这样转换
    常用的有
    GBK
    ISO-8859-1
    UTF-8
    GB2312
      

  2.   

    得到的应该是????没有错, 因为ISO-8859-1本身就不能正常显示中文呀~你再转换回GB2312试试!
      

  3.   

    ?字符串不是unicode的吗?
    lz指的是GB2312的byte[]转ISO-8859-1的byte[]?
      

  4.   

    GB2312编码的字符串转换为ISO-8859-1编码的字符串?-------------------------------------------------------java使用UNICODE表示字符串,所以你不可能成功。
      

  5.   

    谢谢各位热心回答,我的意思是遇到这么一道题,必然有它的道理。java里面默认是用unicode字符集,ISO-8859-1编码本身不能表示中文,用java自带的方法转换肯定是显示?,但会不会题目的意思是把中文双字节转换成单字节,再把单字节的编码转换成ISO-8859-1?这是我猜测的,不知道有没有研究过这方面的高手解答下,谢谢!
      

  6.   

    难道是这个意思?StringBuffer strBuf = new StringBuffer();
    String str = "中国";
    byte[] bGBK = str.getBytes("GBK");
    for(int i=0;i<bGBK.length;i++){
    //  System.out.println(Integer.toHexString(bGBK[i]&0xff));
        strBuf.append(Integer.toHexString(bGBK[i]&0xff));
    }
    System.out.println(strBuf.toString());得到结果是:d6d0b9fa
      

  7.   

    字符串是没有编码区别的
    有区别的是存储字符串的字节序列有编码区分
    因此应该是说,把GB2312编码的字符串字节序列转化为ISO-8859-1编码的字节序列
      

  8.   

    new String(gb2312字节序列,"GB2312").getBytes("ISO-8859-1")