常见编码方式

常见编码方式

ASCll码

统一规定了英文字符与二进制位之间的关系,一共规定了128个字符的编码

Unicode

是一种所有符号的编码,将世界上所有的符号都纳入其中

存在的问题是,Unicode只是一个符号集,只规定了符号的二进制代码,没有规定这个二进制代码该如何储存。为了解决这个问题,就有了Unicode的三种实现方式:UTF-8,UTF-16,UTF-32

UTF-8

它是一种可变长度的编码方式,可以用1~4个字节表示一个符号,根据不同的符号变化字节长度

编码规则:

1.对于单字节的符号,字节的第一位设为0,后面7位为这个符号的Unicode码。因此对于英文字母,UTF-8和ASCll码是相同的

2.对于n字节的符号,第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10,其余的二进制位用这个字符的Unicode码点来填充(从后向前填充,不够的用0补上)

十进制UnicodeUTF-8
0-1270x000000-0x00007F0xxxxxxx(7位)
128-2047位0x000080-0x0007FF110xxxxx 10xxxxxx(11位)
2048-65535位0x000800-0x00FFFF1110xxxx 10xxxxxx 10xxxxxx(16位)
65536-1114111位0x010000-0x10FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx(21位)

UTF-16

Unicode编码点分为17个平面(plane),每个平面包含216(即65536)个码位(code point),而第一个平面称为“基本多语言平面”(Basic Multilingual Plane,简称BMP),其余平面称为“辅助平面”(Supplementary Planes)。其中“基本多语言平面”(00xFFFF)中0xD8000xDFFF之间的码位作为保留,未使用。

UTF-16同时结合了定长和变长两种编码方法的特点。他的编码规则很简单:基本平面的字符占用2个字节,辅助平面的字符占用4个字节。也就是说,UTF-16的编码长度要么是2个字节,要么是4个字节

十进制UnicodeUTF-16
0-65535位0x00000-0x00FFFFxxxxxxxx xxxxxxxx(16位)
65536-1114111位0x010000-0x10FFFF110110yy yyyyyyyy 110111xx xxxxxxxx(20位)

与UTF-8相比虽然表示的方法简单方便,有很大一部分字符用一个字节就可以表示的现在要用两个字节表示,有占有的存储空间放大一倍,会增大网络传输的流量,而且没必要这么做。

GBK

是GB2312的扩展,是向上兼容的,GB2312(国标码)中的汉字编码与GBK中汉字的相同。另外,GBK还包含繁体字的编码


版权声明:本文为qq_41117896原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。