Unicode编码,utf-8、utf-16、utf-32、gbk、宽字节字符、多(窄)字。。。
最近⼯作需要,做了很多unicode、gbk、宽字节、多字节的转换,然后⾃⼰就混乱了,所以就搜索的⼀些资料,简单汇总⼀下,防⽌下次的混乱。
ASCII编码
美国⼈制定的⼀套字符集,描述英语中的字符和8位⼆进制数(1字节)的对应关系,这被称为 ASCII 码。ASCII码共定义了128个字符,使⽤了8位⼆进制数中的7位,最⾼位统⼀规定为0。
unicode编码
Unicode(统⼀码、万国码、单⼀码)是计算机科学领域⾥的⼀项业界标准,包括字符集、编码⽅案等。 它是为了解决传统的字符编码⽅案的局限⽽产⽣的,它为每种语⾔中的每个字符设定了统⼀并且唯⼀的⼆进制编码,以满⾜跨语⾔、跨平台进⾏⽂本转换、处理的要求. UTF 是 Unicode Transformation Format 的缩写,意思是“Unicode转换格式”,后⾯的数字表明⾄少使⽤多少个⽐特位(Bit)来存储字符。Unicode可以使⽤的编码有三种,分别是UTF-8,UTF-16,UTF-32。
utf-8
utf-8的编码规则很简单:如果只有⼀个字节则其最⾼⼆进制位为0;如果是多字节,其第⼀个字节从最⾼位开始,连续的⼆进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。具体的转换表如下:
xxx 就⽤来存储 Unicode 中的字符编号
utf-16
utf-16⼤部分以固定长度的字节 (2字节) 储存,也有四个字节储存,但UTF-16却⽆法兼容于ASCII编码
字节utf-16
2xxxxxxxx xxxxxxxx
4110110xx xxxxxxxx 110111xx xxxxxxxx
utf-32
unicode编码转换二进制
utf-32:所有的字符都以4个字节长度来储存,也⽆法兼容ASCII编码
GBK
gbk(多字节字符编码):字符均使⽤双字节来表⽰,只不过为区分中⽂,将其最⾼位都定成1。⽽英⽂字符最⾼位是0。Gbk编码容纳了所有的中国字符。
宽字符和窄字符(多字节字符)
⾸先要注意:宽窄字符与UTF16,UTF8不是对应的关系
有的编码⽅式采⽤ 1~n 个字节存储,是变长的,例如 UTF-8、GB2312、GBK 等;如果⼀个字符使⽤了这种编码⽅式,我们就将它称为多字节字符,或者窄字符
有的编码⽅式是固定长度的,不管字符编号⼤⼩,始终采⽤ n 个字节存储,例如 UTF-32、UTF-16 等;如果⼀个字符使⽤了这种编码⽅式,我们就将它称为宽字符。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论