您的位置:首页 > 编程语言 > Java开发

java之编码问题总结(综合版)

2018-04-02 21:52 211 查看
编码问题总结(图一)


不同编码表的编码与解码(图二)


字符编码的个人理解(文字版)
讨论1.很早就听说乱码问题,一直有点儿搞不懂,现在也没有确切搞懂,基于现在的了解,我就做一下现有知识的总结:   
    我们目前经常接触到的是GBK和UTF-8两种编码表(编码方式),当我们定义一个字符:String str = "你好"; 这个时候这个str就相当于一个"硬通货" ,比如:
        它可用UTF-8 (3个字节代表一个汉字)编码成 [-28 -67 -96 -27 -91 -67 ] 总共6个字节,这样就可以存储在硬盘中,当需要读取这个字符串时,我们就用一个字节流把它读到字节数组bytes中,然后用 new String(bytes, "UTF-8");将字节数组转化为字符串,这个就相当与解码,把我们看不懂的字节解码成我们可以识别字符串;
        当然它也可用GBK (2个字节代表一个汉字)编码成 [-60 -29 -70 -61 ] 总共4个字节,这样就可以存储在硬盘中,当需要读取这个字符串时,我们就用一个字节流把它读到字节数组bytes中,然后用 new String(bytes, "GBK");将字节数组转化为字符串,这个就相当与解码,把我们看不懂的字节解码成我们可以识别字符串;
        上面两种情况都是比较和谐的,但是:
            1.当一个字符串被用 UTF-8 编码,存入硬盘,然后我们将其读出,然后用GBK来解码,就会出现乱码,(字符数量增多,并且出现不认识的字符)
            2.或者是当一个字符串被用 GBK编码,存入硬盘,然后我们将其读出,然后用UTF-8 来解码,就会出现乱码,(字符数量减少,并且出现不认识的字符)
    通过上面一顿分析,我们发现乱码的发生,是在内存中解码时出现的,而不在硬盘上,所以一个文件在硬盘上存储时,存储的是某种编码方式生成的二进制字节码文件,甚至当我们把这些文件读入内存时,仍然没有出现乱码这一说,只有当我们试图用某种编码格式将读来的二进制字节数组进行字符串的转化时,并且是用了与编码时不相同的字符集时,才产生了乱码的问题,    只要我们把握住字符本身就是"硬通货",就抓住了编码问题的根,就可以把问题分析好.
    
   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: