utf-8、unicode、gbk、gb2312、ANSI编码的区别

utf-8、unicode、gbk、gb2312编码的区别

utf-8

先来看看百度的解释:
一种针对Unicode的可变长度字符编码,又称万国码。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)

utf8编码可以显示中文、英文以及其它语言,是一种国际化的标准,允许含BOM(可以理解为一中符号,来标识中文还是英文),但通常不含BOM,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码

UTF-8编码规则:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8转换表表示如下:

gb2312

翻译为信息交换用汉字编码字符集,明显就是国家规定的标准,GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆

gbk

GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。

GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:

GBK、GB2312—>Unicode—>UTF8

UTF8—>Unicode—>GBK、GB2312
我的理解为国外的标准和国内的标准需要通过unicode这一介质进行转换

一般在编程的时候推荐同意编码方式,推荐utf-8.,因为GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。现在的硬件设备已经很高级了,所以使用utf8还是绰绰有余的

ANSI

今天在用记事本进行编辑的时候,在想着记事本用的是什么编码,就打开记事本的另存为,可以发现
ANSI
所以去查了以下ANSI的编码,
在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个字符,总共表示128个字符,其中包括了英文字母、数字、标点符号等常用字符。之后,又进行扩展,使用8 bits表示一个字符,可以表示256个字符,主要在原来的7 bits字符集的基础上加入了一些特殊符号例如制表符

后来,由于各国语言的加入,ASCII已经不能满足信息交流的需要,因此,为了能够表示其它国家的文字,各国在ASCII的基础上制定了自己的字符集,这些从ANSI标准派生的字符集被习惯的统称为ANSI字符集,它们正式的名称应该是MBCS(Multi-Byte Chactacter System,即多字节字符系统)。这些派生字符集的特点是以ASCII 127 bits为基础,兼容ASCII 127,他们使用大于128的编码作为一个Leading Byte,紧跟在Leading Byte后的第二(甚至第三)个字符与Leading Byte一起作为实际的编码。这样的字符集有很多,我们常见的GB-2312就是其中之一。

扫描二维码关注公众号,回复: 1156767 查看本文章

例如在GB-2312字符集中,“连通”的编码为C1 AC CD A8,其中C1和CD就是Leading Byte。前127个编码为标准ASCII保留,例如“0”的编码是30H(30H表示十六进制的30)。软件在读取时,如果看到30H,知道它小于128就是标准ASCII,表示“0”,看到C1大于128就知道它后面有一个另外的编码,因此C1 AC一同构成一个整个的编码,在GB-2312字符集中表示“连”。

由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,提出了Unicode字符集,它固定使用16 bits(两个字节、一个字)来表示一个字符,共可以表示65536个字符。将世界上几乎所有语言的常用字符收录其中,方便了信息交流。标准的Unicode称为UTF-16。后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对Unicode进行编码。注意UTF-8是编码,它属于Unicode字符集。Unicode字符集有多种编码形式,而ASCII只有一种,大多数MBCS(包括GB-2312)也只有一种。

参考:http://blog.csdn.net/liyangbing315/article/details/5616643


后续继续更新

猜你喜欢

转载自blog.csdn.net/code_AC/article/details/71436422