天天看点

unicode与utf-8的联系

参考

​​阮一峰:字符编码笔记​​

​​Unicode 和 UTF-8 有什么区别?​​

①. ASCII码

由美国最早指定的编码方式. 每个字符用个比特表示, 所以最多可以表示种字符

由于只需要表示一些字母和数字或简单符号(一共128种字符), 所以这样表示没有问题.

②. Unicode

对于使用英语的国家,ASCII码已经足够使用.

使用其他语言的国家就需要创建自己的编码方式了, 比如编码中文的GBK格式.

后来每个国家都创建一种编码方式, 交流极其不便, 需要有一种编码统一起来.

这就是Unicode编码, 目前它包含大概1114112个字符,使用数字0-0x10FFFF来映射这些字符。

比如U+4E25表示汉字严

③.Unicode的不足

虽然Unicode制定了二进制和字符间的映射, 但它没有规定这个二进制代码如何存储.

如果采用ASCII码就知道每个比特表示一个字符, 而Unicode码则没有这样规定。

当然我们也可以效仿ASCII码, 比如用四个字节来表示一个字符.

这样的问题是, 数字小的那些二进制高位都是0, 而这些二进制对应的字符恰好是常用的那些

极大的浪费了存储空间.

④.UTF-8

​UTF-8​

​​是​

​Unicode​

​的一种实现方式.

​UTF-8 ​

​​最大的一个特点,就是它是一种变长的编码方式。它可以使用​

​1~4​

​个字节表示一个符号,根据不同的符号而变化字节长度, 这样极大的节省了空间.

UTF-8的编码规则如下

Ⅰ. 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,​

​UTF-8​

​​编码和 ​

​ASCII​

​码是相同的。

Ⅱ. 对于​

​n​

​​字节的符号(​

​n > 1​

​​),第一个字节的前​

​n​

​​位都设为1,第​

​n + 1​

​​位设为0,后面字节的前两位一律设为​

​10​

​​。剩下的没有提及的二进制位,全部为这个符号的​

​Unicode​

​码。

具体如下图所示

unicode与utf-8的联系

这样设置有一个好处. 当看到以0开头就知道接下来的字符是一个字节

继续阅读