美文网首页
Unicode 与 UTF-8

Unicode 与 UTF-8

作者: 善留其余 | 来源:发表于2020-06-02 00:07 被阅读0次

今天重新学习组成原理,发现Unicode和UTF-8之间的联系原来是那么有趣,遂记录下来。

我们都知道,Unicode是为了世界各国互相通信没有阻碍而设计出的字符集,但在早年发展的时候,它的普及却很慢,因为对于那些使用英文的国家来说,用Unicode太吃亏了,原本他们使用ASCII,一个英文只需要对应一个字节就足够了,而用了Unicode,就要变成双字节。平白无故多出了一倍空间。(假如不统一长度,系统就很难分辨谁是谁了,比如ASCII:0100 1010 和GB: 0100 1010 1010 1111,对系统而言,后面它不清楚是两个ASCII 还是 一个GB了,所以ASCII前面要补0 变成 0000 0000 0100 1010 才行        ps:这个例子的编码是错的,大家知道意思就行)

但是随着互联网的不断发展,统一编码这件事是一定要面对的,于是UTF-8应运而生,UTF-8是一种针对Unicode的可变长度编码,它让英文只需要用Unicode的一个字节就行了,我们来看看它是怎么解决这个问题的。

对于英文,它只需要使用0xxxxxxx就可以表示出来,那它为什么不需要像Unicode那样补 0 使长度一样呢

原因在于每一行 xxxx 前面的数字都是不一样的,这些数字其实相当于告诉了操作系统这段数据有多长,比如第一行的是 0 就等于告诉系统它只有八位,后面的数据不属于它,第二行是 110 就是两个八位,第三行是 1110 就是三个,正因为有了这些标示使每段数据有明显的区分度,英文就可以只用一个字节来表示

我们再来看每一行的 x 的个数,第一行的 U+007F,7F 转换成二进制需要 7 位数字来表示,于是 Byte1 里面的 x 的个数恰好是 7 个,第二行 7FF 转换成二进制需要 11 位,于是 Byte1 和 2里 x 的个数加起来就是 11 个,依此类推第三行和第四行的个数 16,21都和 x 的个数是匹配的。

非常巧妙,Unicode所对应的二进制数可以刚好填进这些xxxx里,而xxxx前面的标示又使每一段数据能够区分出来。

PS:在UTF-8里,中文是需要三个字节来表示的,比GB的多了一个字节,血亏.jpg

相关文章

  • unicode, utf8/16, codepoint, big

    big/small endian ASCII,Unicode和UTF-8 unicode、codepoint

  • 中文处理

    从几个例子说说 Erlang 如何处理中文. 知识介绍:Unicode与UTF-8的区别,简单来说,Unicode...

  • ASCII,Unicode,UTF-8,Base-64

    字符编码笔记:ASCII,Unicode和UTF-8字符编码笔记:ASCII、Unicode、UTF-8 和 Ba...

  • python基础-13-史上最通俗易懂的编码讲解

    常用编码 ascii unicode utf-8 gbk 编码 ascii unicode utf-...

  • 关于编码二三事

    1.中文编码共有3种,unicode, utf-8, gb2312。虽然unicode和utf-8比较像,但是我们...

  • 搞定编码格式问题

    Unicode 于 utf-8 以下文章来自知乎回答 Unicode 是「字符集」UTF-8 是「编码规则」 其中...

  • Unicode与UTF-8

    Unicode Unicode是一个国际标准,用于文本的编码和表示。它使得可以用标准格式来表示来自任意语言的几乎所...

  • unicode 与 utf-8

    1. wikipedia 重点看章节1.2 Architecture and terminology 2. 仔细读...

  • Unicode与UTF-8

    UTF-8规则: 1. 对于单字节的符号, 字节的第一位设为0, 后面7位为这个符号的Unicode码, 因此ut...

  • Unicode 与 UTF-8

    最近在开发上遇到了点编码的问题,又重新学习了字符集以及编码的知识。特此记录一下。 核心 我比较喜欢一开始讲述核心的...

网友评论

      本文标题:Unicode 与 UTF-8

      本文链接:https://www.haomeiwen.com/subject/cfbezhtx.html