计算机中存储信息的最小单元是一个字节,即8个bit,所以能表示的字符范围是0~255个。
ASCII码总共128个。
ISO-8858-1总共能表示256个字符。
GB2313是双字节编码,总的编码范围是A1-F7,包含6763个汉字。
GBK总共有23840个码位,它能表示21003个汉字。
UTF-16大部分是两个字节,少部分是4个字节。
UTF-8采用了一种变长技术,每个编码区域有不同的字码长度。
UTF-8有以下编码规则:
如果一个字节,最高位为0,表示这是一个ASCII字符。
如果一个字节,以11开头,连续的1的个数暗示这个字符的字节数,110*****代表它是双字节UTF-8字符的首字节。
如果一个字节,以10开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节。
中文字符经过ISO-8859-1编码会丢失信息,通常我们称之为“黑洞”,它会把不认识的字符吸收掉。
几种编码格式的比较
对中文字符几种编码格式都能处理,GB2312与GBK编码规则类似,但是GBK范围更大,它能处理所有汉字字符。UTF-16与UTF-8都是处理Unicode编码,它们的编码规则不太相同,相对来说UTF-16编码效率最高,字符到字节相互转换更简单,它适合在本地磁盘与内存之间使用,可以进行字符和字节之间的快速切换,如Java的内存编码就采用UTF-16编码,但它不适合在网络之间传输。UTF-8对ASCII字符采用单字节存储,另外单个字符损坏也不会影响后面的其他字符,编码效率介于GBK和UTF-16之间,所以UTF-8在编码效率上和编码安全性上做了平衡。