几种编码的对比:ASCII,Unicode,ANSI,UTF-8

来源:互联网 发布:清华男子自宫真相知乎 编辑:程序博客网 时间:2024/06/09 23:54
ASCII:用单字节表示,共有128个ASCII字符,最高位总为0


Unicode:用双字节表示,可表示65000个字符,以Unicode编码的文件包含一个文件头“FFFE”,彼此来表示该文件的编码格式为Unicode


当用Unicode编码来表示ASCII码字符时,高八位为00, 所以如果一个Unicode字符的高八位为00时,将其低八位按照ASCII编码解码;反之,则按非ASCII码解码。


如果一个文件中的字符都是ASCII码字符,却采用Unicode编码时,该文件的大小将翻倍,这样非常浪费空间,而ANSI可以避免这个问题


ANSI:对ASCII字符采用单字节表示,对Unicode字符采用双字节表示。
那么ANSI是怎样区分一个字符是双字节还是单字节呢?前面我们提到了ASCII字符的最高位为0, 所以当读到一个字节最高位为0时,则将该字节按ASCII解码;而如果最高位为1,说明该字符是双字节,需要等到读入下一个字节,再一起按照Unicode解码


Windows系统在处理Unicode是按照little endian的方式处理,即先处理低八位,再处理高八位,其他的系统可能相反;而ANSI不存在这种问题,始终是先处理高八位,再处理低八位。Unicode big endian和ANSI的处理顺序相同。


UTF-8:是使用最广的一种实现Unicode的方式,使用一到四个字节表示,变长。它的编码规则是:
(1)单字节的字符的编码就是其ASCII码 (最高位为0)
(2)对于长于一个字节的符号,假设有n(n>1)个字节,第一个字节的前n位设为1, 接下来是一个0, 剩余的字节的前两位均设为10. 剩余的位数用于存放该字符的Unicode编码,将该Unicode编码填入剩余位时,按照从右向左的顺序填写,多出的位填0.


尽管ANSI和UTF-8都可以用于表示ASCII和Unicode编码的混合字符集,但是UTF-8应用更广泛,更灵活,比ANSI表示的范围更广,并且UTF-8的规则统一,而在不同的操作系统下,ANSI编码不同,这些不同的ANSI编码之间不兼容。
原创粉丝点击