美文网首页
unicode、utf-8 编码原理

unicode、utf-8 编码原理

作者: 苦苦修行 | 来源:发表于2019-08-06 15:17 被阅读0次

本文不涉及具体细节,只泛泛而谈。
本文全是大白话,也就是说,可能很多用词不那么专业。但是,懂了就达到目的了。以后再去看专业的文章,就会觉得容易多了。

本文是在研读了阮一峰和知乎网友的基础上写作的。
相关链接为:
字符编码笔记:ASCII,Unicode 和 UTF-8
Unicode 编码及 UTF-32, UTF-16 和 UTF-8

注意:勿要纠结于我举的例子,我知道是错的,在本文中仅为阐述思想。

以下为本人的心得:

为何会出现 unicode?
  1. 为了让文字在电脑上显示,必须给每个字符编个号码,比如我给字母a 编号为1,字母 b 编号为9999
  2. 那么问题来了,在中国可能给汉字编号为1,在美国可能给字母 a 编号为1,如果中美两国交流,这个编号1到底该解读成还是a
  3. 为了解决这个问题,就要在世界范围内统一编号,把世界上所有的字符都包含进来,设置一个唯一的编号。比如编号1只能表示a,不能有其它的表示。那么这个方案就是 unicode,从名字上也能看出来,是统一的编号。
为何又要出现 utf-8等?
  1. 在 unicode 方案中,最常用也是最基本的,只用两个字节编号,就包含了世界上主要的文字了。如果用三个字节编号,那就是 unicode 扩展部分的了。(unicode 有 17 个平面(Plane 0 - Plane 16),我们最常用的就是Plane 0(Plane 1 - Plane 16) 就是扩展平面。说白了,扩展平面就是要用三个字节来编码了,Plane 1的最高位字节值是 1,依次类推,Plane 16的最高位字节值是 16,用 16 进制就是 10)
  2. 如果直接用 unicode 的编号来存储字符,最少也要用到两个字节,这会有什么问题呢?人家西方字符,明明用一个字节就已经够够的了,非要用两个字节存储太浪费资源了。
  3. 于是就有了 utf-8 编码方案。如果是西方字符就用一个字节存储,如果是汉字等就用两到三个字节存储。这样就都兼顾到了。
utf-8实现原理通俗讲解
  1. 但是等等,你 utf-8 一会用一个字节,一会用两个三个字节,我计算机怎么知道你是几个字节表示一个字符呢?
  2. 来看 utf-8 是怎么设计的。如果是西方字符,就用一个字节表示,字节的最高位是 0(好像西方字符总共是 128 个,用不到最高位)。如果是汉字,把它的 unicode 编号展开为二进制(给它起个代号,就叫 2B 吧)。utf-8 生成一个这样的玩意儿(给它起个代号,就叫 wy 吧):1110xxxx 10xxxxxx 10xxxxxx, 你从2B的最低位开始,一个个的往 x 里放(也是从最低位开始),如果x 没放完,用 0 补全。 utf-8 在设计 wy 的时候,要让每个字节的 x 用到了(注意这句话,并不意味着每个x 都被用到)。然后把这个 utf-8 的编码就存到文档里了。
  3. 用 utf-8 编码方案用读这个文档的时候,它就开始这样解析了。如果一个字节最高位是 0,说明这一个字节就表示一个西方字符。如果一个字节最高位是1110这样的,说明连同它自己,接下来的三个字节表示一个字符,然后再把这三个字节 x 位上二进制取出来连在一起,这不就是一开始的那个2B吗。然后用这个 2B 的值(就是 unicode 的编号)去电脑系统里的unicode 表里找到对应的字符显示出来。
  4. 通过以上说明,你大概也看出来了:utf-8 这类编码方案,存的时候,是用 utf-8 自己的设计,把 unicode 编号变为自己可以解析的编号。读的时候,再把 utf-8 的编号还原成 unicode 编号,用unicode 编号去电脑里查字符,然后把字符显示出来。其它编码方案也是这个思路。
电脑系统中有一个 unicode 表,里面是 unicode 编号和字符的对应关系,这是各种编码之间转换的基础。

相关文章

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

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

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

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

  • unicode

    gbk---解码--->unicode---编码--->utf-8 其它编码格式到unicode属于解码,反之属于编码

  • unicode、utf-8 编码原理

    本文不涉及具体细节,只泛泛而谈。本文全是大白话,也就是说,可能很多用词不那么专业。但是,懂了就达到目的了。以后再去...

  • 编码

    编码 编码格式(ASCII编码,GB2312编码(简体中文),GBK,ANSI编码,unicode,utf-8编码...

  • 关于编码二三事

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

  • 搞定编码格式问题

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

  • go之UTF-8

    unicode 请先查看 字符编码笔记:ASCII,Unicode 和 UTF-8[https://www.rua...

  • 一些好的网站、文章

    1、字符编码笔记:ASCII,Unicode 和 UTF-8(转)

  • 编码

    一、这里比较下常见变长编码规则:UTF-8和哈夫曼编码 编码: utf-8编码是对Unicode(万国码)进行编码...

网友评论

      本文标题:unicode、utf-8 编码原理

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