编码原理理解之「UTF-8」

 我来答
户如乐9318
2022-06-22 · TA获得超过6640个赞
知道小有建树答主
回答量:2559
采纳率:100%
帮助的人:137万
展开全部

UTF-8 (8位元, Universal Character Set/Unicode Transformation Format )是针对Unicode的一种可变长度字符编码。它可以用来表示 Unicode 标准中的任何字符,而且其编码中的第一个字节仍与 ASCII 相容,使得原来处理 ASCII 字符的软件无须或只进行少部份修改后,便可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。

总结下来, UTF8 有如下特点:
1)是 unicode 的一种实现方式;
2)是一种变长编码标准;
3)可以与 ASCII 码有效兼容;
4)应用超级广泛编码标准。

我们讲, UTF-8 unicode 的一种实现方式,那么,想要对一个字符进行 UTF-8 编码,首先我们要知道这个字符的 unicode 编码(字符的 unicode 编码是约定好的,全球统一不变的)。拿 unicode 编码的方式很简单,网上有很多 工具 可以做到。

接下来针对不同的 unicode 符号范围, utf-8 编码实际占用的字节数可能 1~4 字节不等👇

总结下来,针对 UTF8 ,编码规则其实只有两条:
1) 单字节规则: 对于 单字节 的符号,字节的第一位(最高位)设为 0 ,后面 7 位为这个符号的 unicode 码。
2) n字节规则: 对于 n 字节的符号( n>1 ),第一个字节的前 n 位都设为 1 ,第 n+1 位设为 0 ,后面字节的前两位一律设为 10 。剩下的没有提及的二进制位,全部为这个符号的 unicode 码。

「真」 举例,我们查到 「真」 unicode 编码是 \u771f \u 只是 unicode 的编码标记,其后面跟的还是 16 进制数),发现真的编码范围是 0x0800 ~ 0xffff 间,故选择 3字节 的编码方式👇

我们将 0x771f 转化为2进制(共16位),并分成 4、6、6 三组,填入👆编码方式的 「x」 的位置,得到 1110 0111 10 011100 10 011111 ,至此完成 「真」 utf-8 编码,转化为 16 进制描述即: 0xe79c9f

那么,有 mac 的小伙伴可以试试我提供的一套基于 iOS 的编码理解工程。可以快速打印出一段文本编码的数据结果( 16 进制、 2 进制都有),示例如下:

git地址: https://github.com/chrisYooh/CYEncoding.git
对你有帮助的话记得帮我点个 「Star」 哦! 😊✨✨✨

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式