UTF-8编码原理

news/2024/7/9 1:31:26

UTF-8是目前使用最广泛的Unicode字符编码,本文顺着历史顺序讲解,来引出UTF8编码的来由和工作原理。

1. ASCII码

最开始是ASCII码,每个码位(code point)占1个字节,使用128个码位定义128个字符,每个字节的最高位是0
在这里插入图片描述

如果是英文环境,这个编码很理想,但是如果是其它语系环境,ASCII码就不行了,所以推出了Unicode编码。

2. UTF-32

UTF是Unicode Transformation Formats的缩写,32意思是每个字符使用32位来表示,即4个字节,这样就能表示很多的字符了。
但是缺点也很明显,如果是英文环境,那么每个英文字符都要占用4个字节,这样就会造成大量的浪费。

3.UTF-16

UTF16不是每个字符使用2个字节(16位)表示,而是一个字符根据其对应的码位(code point)大小,可以使用2个字节表示或者4个字节表示

4.UTF-8

UTF-8是变长的,根据字符对应的码位(code point)大小,可以是1个字节,2个字节,3个字节或4个字节。
在这里插入图片描述

在解码时,如何知道这个字符占用几个字节呢?通过解析第一个字节获取信息。

1个字节

如果第一个字节的最高位是0,那么表示占一个字节,如下,

在这里插入图片描述

可以看出UTF-8是完全兼容ASCII码的,因为ASCII码的最高位也是0

2个字节

如果第一个字节(leading byte)的最高三位是110,那么表示这个字符占2个字节,第二个字节的最高2位是10
在这里插入图片描述
蓝色部分的数字组合在一起,就是实际的码位值。
假如要表示的字符,其码位值是413,那么就表示如下,
在这里插入图片描述

3个字节

如果第一个字节(leading byte)的最高三位是1110,那么表示这个字符占3个字节,第2和第3个字节的最高2位是10
在这里插入图片描述

4个字节

原理同上,只是第一个字节(leading byte)的最高三位是11110
在这里插入图片描述
不同字节对应的码位范围如下图,左侧Bits栏表示用于表示码位的bit数,如4个字节,其中有21位用于表示码位,即上图中的蓝色部分。
在这里插入图片描述


http://lihuaxi.xjx100.cn/news/2142798.html

相关文章

前端跨页面通信方案介绍

在浏览器中,我们可以同时打开多个Tab页,每个Tab页可以粗略理解为一个“独立”的运行环境,即使是全局对象也不会在多个Tab间共享。然而有些时候,我们希望能在这些“独立”的Tab页面之间同步页面的数据、信息或状态。这就是本文说说…

代码随想录day41| 343. 整数拆分 、96.不同的二叉搜索树

343. 整数拆分 dp[i]:对i进行拆分,相乘得到的最大值dp[i] 递推公式: dp[i] max(dp[i], j * (i - j), j * dp[i - j]); 为什么还要dp[i[放进去比较? ——这其实是在不断更新dp[i]的值,不放进的话,原本的…

单机部署 MinIO

一、 创建目录 sudo mkdir -p /opt/minio/{bin,conf,data}二、下载MinIO二进制文件 cd /opt/minio/bin sudo wget https://dl.min.io/server/minio/release/linux-amd64/minio sudo chmod x minio三、添加配置文件 #sudo vim /opt/minio/conf/minio.conf#指定数据存储目录. …

ajax的优缺点有哪些?

我们先来介绍一下什么是ajax: 对于ajax的理解,ajax是一种使用现有技术集合技术内容包括: HTML或XHTML、CSS、 JavaScript、DOM、XML、 XSLT, 以及最重要的XMLHttpRequest。 用于浏览器与服务器之间使用异步数据传输(HTTP请求),做…

SPAT Revolution 猫灯乐团的独特现场体验

声音工程师Johnny Torchy谈到使用SPAT Revolution进行WFS设置,以创造与The Neko Light Orchestra一起令人难忘和沉浸的独特现场体验。 音乐团体 Neko Light Orchestra 有一个举办马拉松比赛的想法。Neko Light 项目非常有趣,因为舞台上有多达 13 位音乐…

Java 分支结构 - if…else/switch

顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构。 Java有两种分支结构: if语句switch语句 if语句 一个if语句包含一个布尔表达式和一条或多条语句。 语法 If 语句的用语法如下: if(布尔表达式) {//如果布尔表达…

深入探索Android Studio中应用堆栈信息的查看与分析艺术

引言 在Android应用开发与调试过程中,正确且有效地查看和分析堆栈信息至关重要。堆栈信息记录了程序在执行过程中的调用路径,尤其在应用程序崩溃或异常发生时,它是诊断问题源头的重要线索。本文将详细介绍如何利用Android Studio这一强大的I…

数据库-root密码丢失的重置方案(win11环境)

当在windows系统中安装的mysql由于操作不当,或者密码遗忘,今天测试了一下,可以用以下方法重置root的密码。 mysqlwindows环境root密码重置问题 在win10/11环境下mysql8密码遗忘后的重置密码方案。 停止mysql服务 查找windows中的mysql服务名称…