本文由larrylgq编写,转载请注明出处:http://blog.youkuaiyun.com/larrylgq/article/details/7444999
作者:吕桂强
邮箱:larry.lv.word@gmail.com
由于计算机只能处理用开关组成的二进制数字,所以当我们要处理文字的时候就要将文字转换成相应的数字,而这些数字就是文字编码
因为世界上语言众多,再加上方言,古代语言,特殊符号等,我们没法同时包括所有的文字,所以只能事先规定使用哪些文字,这些实现规定的文字集合就叫字符集
像我们经常用的有ASCII和Unicode,GB2312等
其中Unicode是为了处理所有语言的文字而定义的文字集
字符集中为字符分配编码的是字符编码
eg:UTF-8等
一个字符集可以对应多种编码方式
Unicode字符集:
之前的Unicode字符集使用16位编码方式来实现,但是随着加入的文字越来越多,超过了65535之后之前的编码方式就已经放不下了
现在Unicode使用21位来表示
Unicode的编码方式:
Unicode主要有UTF-8,UTF-16BE/LE(big endian,little endian),UTF-32BE/LE等编码方式
UTF-8:
优点是:可变长的,与Ascii兼容
第一个字节开头有几个连续的1,表示有几个字节
缺点是:
1,占用空间大,几乎所有的汉字都要3个字节
2,正因为是可变长度的,所以随机访问字符串中任意文字的时候需要正序遍历
UTF-16:
从Unicode2字符数超过65530之后就渐渐淘汰
UTF-32:
采用固定的32位的编码方式
缺点是占用内存多
优点是随机访问快
程序中出现乱码的原因:
1,使用错误的编码方式读取
2,没有字体(用于在显示器上展示文字)
3,语言进行内部编码转换时出错
4,使用用户自定义的文字
5,使用的字符集不同(缺少字符)
6,字节顺序错误(eg:UTF-16/32的BE和LE)