UnicodeUnicode是一种字符编码标准,它为世界上几乎所有的文字和符号分配了唯一的数字编码 。这使得不同的计算机系统和软件能够正确地显示和处理各种语言的文字 。Unicode采用16位或32位编码,可以表示超过130万个字符 。
「为什么只有Unicode是不够的」
- 「编码长度不一致」:在Unicode中,字符的编码长度可以是1个字节、2个字节、3个字节或4个字节,这使得在存储和传输时需要考虑编码长度的不一致性 。
- 「存储和传输效率」:由于Unicode字符集非常庞大,使用Unicode编码可能会导致存储和传输效率低下,特别是对于只包含少量字符的文本而言 。
- 「兼容性」:许多现有的系统和软件可能仍然使用其他编码方式,如ASCII、ISO-8859等,因此需要与这些编码方式进行兼容 。
a -- 1b -- 2c -- 3...z -- 26
如果用上面的编码表示add,结果就是144 。而当我们要表示hello时没结果就是85121215 。此时85121215还可以表示为heababo、heababae、heablo等,此时这个编码结果就不正确了 。文章插图
图片
此时的12和15就可以表示为不同的组合,这就会导致结果差异 。这里仅仅只是表示了26个字母,再加入其他字符的情况下Unicode远远是不够的 。
我们看看UTF-8如何解决上面的编码问题 , 此时有两种思路:
- 第一种是固定位数解析:如固定两位解析,不足的补0 。这时 hello的编码结果就为0805121215 。
- 第二种是增加标志位:如最简单的加空格,这时hello的编码就是8 5 12 12 15 。
UTF-8UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,它可以用来表示世界上几乎所有的字符 。在UTF-8编码中,每个字符的编码长度可以是1个字节、2个字节、3个字节或4个字节,这使得UTF-8编码非常灵活,可以节省存储空间 。UTF-8编码通过灵活的字节长度来表示Unicode字符,使得它成为一种广泛应用的字符编码方式 。
UTF-8编码的特点:
- 对于英文字符 , 使用1个字节表示,与ASCII兼容;
- 对于常见的其他语言(如西欧语言、中文、日文等)的字符,使用2个或3个字节表示;
- 对于较少使用的字符 , 使用4个字节表示 。
文章插图
图片
- 对于单字节字符(即ASCII字符),UTF-8编码和ASCII编码是相同的 。
- 对于多字节字符,UTF-8使用不同的字节序列来表示不同的Unicode码位 。具体规则如下:
- 对于码位在U+0000至U+007F范围内的字符 , 使用一个字节表示,最高位为0 。
- 对于码位在U+0080至U+07FF范围内的字符,使用两个字节表示,最高三位为110 。
- 对于码位在U+0800至U+FFFF范围内的字符 , 使用三个字节表示,最高四位为1110 。
- 对于码位在U+10000至U+10FFFF范围内的字符,使用四个字节表示,最高五位为11110 。
我们用汉这个字为例:
**汉**的 Unicode 编码为:U+6C49**汉**对应的二进制为:01101100 01001001
汉的Unicode为U+6C49,所以对应规则多字节中的三个字节,此时编码规则为1110xxxx 10xxxxxx 10xxxxxx 。文章插图
图片
将对用的二进制带入编码规则中得到编码为:11100110 10110001 10001001 。
推荐阅读
- 家里养杜鹃花吉祥吗 一般人家里为什么不养杜鹃花
- 2023年上映的五大烂片,没有最烂只有更烂,最后一部烂出新高度
- 家里为什么不让养菊花 菊花暗示啥意思
- 为什么手机投屏找不到设备 为什么手机投屏找不到设备 视频
- 为什么手机最后1%的电可以用很久?原来我们都被它骗了
- 视同缴费年限,怎么计算出来的?为什么有的人有,有的人却没有?
- 赵瑞龙糟蹋了高小琴,为什么高小琴还能跟赵瑞龙谈笑风生
- 怎么擦土豆丝,为什么才擦的土豆丝变色了
- 人民的名义:李达康犯了许多错误,为什么还能平安无事,身居高位
- 七龙珠:孙悟空长大之后为什么就不用金箍棒了?