结果中文字符全部变成?(ascii编码为63).
原因是iso-8859-1把“每个2Byte的Unicode字符”看成一个字符,中文无法识别。
为什么有人要这么用?

解决方案 »

  1.   

    没问题,就是将ISO-8859-1字符集的s变量内容转换为GBK字符集类型。这个只有在页面、后台处理程序、数据库3者之间字符集不一致的情况下使用。不是必须的
      

  2.   

    s.getBytes("ISO-8859-1"),中文字符全部变成?
    这样有不会有信息丢失吗?
      

  3.   

    会丢失!
    String s ="h中";
    byte[] b = s.getBytes("ISO-8859-1");
    System.out.println("ISO-8859-1: "+Arrays.toString(b))
    System.out.println(new String(b));
    输出:
    [104, 63]
    因为一个16Byte的unicode字符 转换后,成为一个8Byte的iso-889-1字符。iso8859-1无法识别中文,故成?.
      

  4.   

    定会丢失!String s ="h中";
    byte[] b = s.getBytes("ISO-8859-1");
    System.out.println("ISO-8859-1: "+Arrays.toString(b));
    输出:
    ISO-8859-1: [104, 63]
    一个2Byte的Unicode字符,变成了一个8byte的iso8859-1字符。
    is08859-1无法识别中文,故变成‘?’
    这就丢失了中文信息。
      

  5.   

    哥们你现在用的是ISO-8859-1编码,可没用GBK啊,当然是乱码了!String s ="h中";
    byte[] b=s.getBytes("ISO-8859-1"),"GBK");
    System.out.println("GBK: "+Arrays.toString(b));这样再试试
      

  6.   

    我也想知道,在超过ASCII范围时显示的那个'?',是真的把内容变成字符'?'了,还是只是这样显示而已,实际值没变?
      

  7.   

    是真的问号(ascii码63)。由于不识别,转换成了?
    new String(s.getBytes("iso-8859-1","GBK") ,前提是s已经是乱码了,而且是gbk的乱码,要把它转回来