UTF-8编码原理

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://www.hqwc.cn/news/588480.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机中的RAM vs ROM

其实,单片机就是个小计算机。大计算机少不了的数据存储系统,单片机一样有,而且往往和CPU集成在一起,显得更加小巧灵活。 直到90年代初,国内容易得到的单片机是8031:不带存储器的芯片,要想工作&a…

HTMLCSS

前端入门 1、HTML&CSS 1、选择器 通配选择器 元素选择器 类选择器 id选择器 复合(组合) 选择器 交集选择器(且) <style> p.class {... } /* 元素选择器需在前面 */.class1.class2 {... } </style>并集选择器(或者) <style> .class1, .class2, …

ZKP价值链路的垂直整合

1. ZKP proof生命周期 从ZKP&#xff08;zero-knowledge proof&#xff09;生命周期&#xff0c;先看围绕ZKP的价值链路形成&#xff1a; 1&#xff09;User intent用户意图&#xff1a;以某用户意图为起点&#xff0c;如想要在某zk-rollup上swap某token、证明其身份、执行某…

护眼台灯对眼睛有危害吗?护眼台灯品牌排行前十名

随着科技的发展和进步&#xff0c;就连我们家中日常所使用的台灯种类也越来越多了&#xff0c;各种各样的智能、护眼台灯出现在我们眼前。不少家长对这类台灯了解并不是很多&#xff0c;不知道护眼台灯对眼睛有危害吗&#xff1f;今天就来好好给大家说说 首先&#xff0c;护眼台…

人脸识别seetaface6 windows + cmake + vs编译,踩坑指南

遇到问题冷静分析&#xff0c;没有解决不了的问题&#xff0c;只是需要时间。与君共勉 环境准备 要在windows 上编译c 源码&#xff0c;需要准备如下软件。省去了详细的安装过程。 visual studio 2022 (社区免费版链接)mingw64 下载路径 (安装后&#xff0c;记得添加系统路径…

看文章看人生,悠悠长长享当下——早读(逆天打工人爬取热门微信文章解读)

看文章看人生&#xff0c;悠悠长长享当下 引言Python 代码第一篇 日子很长 充满希望第二篇 来啦 来啦 来 早班早班 车 车 新闻车 &#xff08;摇摇晃晃&#xff09;结尾 他朝我扔泥巴 我拿泥巴种荷花 引言 人生呀 其实就是一个反反复复的过程 我现在是一天就是一年 一年就是一…

C语言 | Leetcode C语言题解之第6题Z字形变换

题目&#xff1a; 题解&#xff1a; char * convert(char * s, int numRows){int n strlen(s), r numRows;if (r 1 || r > n) {return s;}int t r * 2 - 2;char * ans (char *)malloc(sizeof(char) * (n 1));int pos 0;for (int i 0; i < r; i) { // 枚举矩阵的…

【airtest】自动化入门教程(四)Poco元素定位

目录 一、基础操作 1、通过属性名等方式 2、通过属性组合 3、子节点方式 4、子节点加属性组合方式 5、孙节点offspring 6、兄弟节点sibling 7、父节点parent 8、正则表达式 9、直到某个元素出现 10、直到某个元素消失 二、通过局部坐标定位 1、使用局部坐标系的cli…

【单片机家电产品--晶闸管】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 单片机家电产品–晶闸管 前言 记录学习单片机家电产品内容 已转载记录为主 一、知识点 晶体管和晶闸管之间的区别 晶体管和晶闸管之间的区别 什么是可控硅&#xff08;…

移动端 H5 实现自定义拍照界面

移动端 H5 实现自定义拍照界面 一、实现思路 手机端 H5 实现自定义拍照界面也可以使用 MediaDevices API 和 <video> 标签来实现。 首先&#xff0c;使用 MediaDevices.getUserMedia() 方法获取摄像头媒体流&#xff0c;并将其传递给 <video> 标签进行渲染。 接…

Android的图片加载框架

Android的图片加载框架 为什么要使用图片加载框架&#xff1f;图片加载框架1. Universal Image Loader [https://github.com/nostra13/Android-Universal-Image-Loader](https://github.com/nostra13/Android-Universal-Image-Loader)2. Glide [https://muyangmin.github.io/gl…

Intellij IDEA / Android studio 可持续开发笔记

Intellij 的Java/安卓工具链有着一种不可持续性&#xff0c;这种不可持续性体现在多个方面。 首先是不可持续运行。IDEA 使用时间越长&#xff0c;内存占用越大&#xff0c;从不主动释放。运行时间越长&#xff0c;日志越多&#xff0c;从不主动清理。 然后是不完整的开源&am…