黑马程序员技术交流社区

标题: 学习字符编码解码过程中的一个神奇发现 [打印本页]

作者: 贾浩田    时间: 2014-8-8 14:02
标题: 学习字符编码解码过程中的一个神奇发现
public static void main(String[] args) throws Exception
{
        String str = "田";
        byte[] buf = str.getBytes("UTF-8");  //编码
        System.out.println(Arrays.toString(buf));
        String s1 = new String(buf, "GBK");    //解码错误
        System.out.println(s1);

        byte[] b1 = s1.getBytes("GBK");    //对错误的解码结果进行编码
        System.out.println(Arrays.toString(b1));
        String s2 = new String(b1, "UTF-8");     //再重新按照正确的解码规则进行解码
        System.out.println(s2);
}
为什么我最后显示的不是'田',而是乱码


作者: 黑马黄武先    时间: 2014-8-8 14:15
菜鸟看不懂,帮顶一个
作者: 叼哥    时间: 2014-8-8 14:28
简单来说,比如有0111 1010        1111 0101这两个字节在UTF-8里面有其代表的字符,但是在GBK里面,GBK他不认识这两个,GBK就用同一个字节如 1111 1111来表示不认识的字符并存储,GBK出现了乱码,然后当你用utf-8再来解析的时候,出现的自然也是乱码




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2