UTF-8的编码与解码

文章目录

  • 一、什么是unicode
  • 二、什么是编码
  • 三、.unicode和utf-8编码是什么关系
  • 四、示例
  • 五、编码规则是什么

一、什么是unicode

UNICDOE是一个字符集,它定义了世界上所有字符的唯一编号,每一个字符编号称为码点
详细参考- https://www.cnblogs.com/IllidanStormrage/articles/16593974.html


二、什么是编码

编码是一种将信息从一种形式或格式转换为另一种形式或格式的过程


三、.unicode和utf-8编码是什么关系

  • UTF-8是unicode的实现方式之一
  • UTF-8编码是根据unicode码点来进行编码的,也就是编码对象就是unicode码点

四、示例

你需要一个二进制查看器,我这里使用的是010editor, 你也可以使用在线网站 http://www.metools.info/code/utf8235.html
我这里写下不同字符然后用二进制查看器打开查看

我写下 1 时有, 其二进制为 00110001, 16进制表示为0x31
在这里插入图片描述

我写下 时,有3个字节 二进制为11100100 10111000 10101101, 16进制表示为 E4 B8 AD
在这里插入图片描述

以上都是经过了UTF-8编码后的数据


五、编码规则是什么

1 的码点为 0x31,经过编码之后还是0x31
的码点为 0x4E 0x2D 经过编码后是 0xE4 0xB8 0xAD

可以发现,不同的码点经过utf-8编码后有不同的编码结果,编码规则如下

	   00-7F:	0xxxxxxx80-7FF:	110xxxxx 10xxxxxx800-FFFF:	1110xxxx 10xxxxxx 10xxxxxx
10000-10FFFF:	11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

前面的 00-7F 为码点的范围, 后面则是对应码点的编码规则

1 的码点为 0x31,范围在00-7F,要遵循后面对应的规则 0xxxxxxx
将0x31转为二进制 110001,根据 0xxxxxxx 的规则,从右开始补充二进制

0x110001

多出的x进行补0

00110001

根据上面的规则,我们的编码后是3个字节,一眼就能看出是第三行的编码规则
中的unicode码点为 0x4E2D,也确实在 800-FFFF的范围
4E3D转为二进制就是 01001110 00101101
要拆分为3个部分,每个部分的位数分别为4 6 6
也就是

0100 111000 101101

根据规则,在每个部分前补上相应的位

1110xxxx 10xxxxxx 10xxxxxx
11100100 10111000 10101101

最后三个字节为 E4 B8 AD
和我们前面示例的一样

这就是UTF-8的编码规则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/132913.html

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

相关文章

【【萌新的SOC学习之GPIO之MIO控制LED实验程序设计】】

萌新的SOC学习之GPIO之MIO控制LED实验程序设计 如何设置完GPIO并且传递数据 我们先了解GPIO引脚的配置 每一个GPIO引脚都可以设置成输入输出 ,只有GPIO8 7 只能作为输出 我们现在做一个例子 GPIO 的bank我们知道有4个 bank0 1 2 3 DIRM_0 就是第一个bank 需要写入…

如何压缩视频?视频压缩变小方法汇总

视频是我们日常生活中不可或缺的一部分,但视频文件往往会占用大量存储空间,这在传输和分享过程中可能成为一个瓶颈。 为了解决这一问题,我们可以通过压缩的方式减小视频大小,视频压缩是指在保证视频质量的前提下,通过…

【Debian系统】:安装debian系统之后,很多命令找不到,需要添加sudo之后才能使用,以下解决方法

项目场景: 问题描述 解决方案: 1.临时解决方案 2.永久解决方案 1.首先打开编辑: 2.打开之后最后一行添加代码: 3.最后运行一遍 .bashrc 4.已经可以了,可以试试reboot,重启一下机子 一点一滴才能成长 …

Mysql5.7大限将至升级Mysql 8.0过程记录(未完)

一、前言 时间很快,到2023年10月底,MySQL 5.7就到了它的EOL(End of Life),届时将不会提供任何补丁,无法应对潜在的安全风险;是时候和 MySQL 5.7 说再见了!!!&…

深入理解强化学习——序列决策(Sequential Decision Making)

分类目录:《深入理解联邦学习》总目录 在本文中我们将介绍序列决策(Sequential Decision Making)过程中的各个过程。 智能体与环境 强化学习研究的问题是智能体与环境交互的问题,下图左边的智能体一直在与下图右边的环境进行交互…

收银系统商品定价设计思考

一、背景 因为门店系统里商品总共也就几万款,一直以来都是根据条码由总部统一定价销售,现在有加盟店,各门店也有进行各自促销活动的需求,这就需要放开门店自主定价权,所以近段时间系统在商品定价上做了扩展。 二、商…

【tomcat、java】

java&#xff1a;maven配置 1.安装插件 <build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port&…

基于web的酒店客房管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 会员信息管理 客房信息管理 收藏客房管理 用户入住管理 客房清扫管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施…

Android组件通信——ActivityGroup(二十五)

1. ActivityGroup 1.1 知识点 &#xff08;1&#xff09;了解ActivityGroup的作用&#xff1b; &#xff08;2&#xff09;使用ActivityGroup进行复杂标签菜单的实现&#xff1b; &#xff08;3&#xff09;使用PopupWindow组件实现弹出菜单组件开发&#xff1b; 1.2 具体…

2023全国大学生软件测试大赛开发者测试练习题99分答案(ScapegoatTree2023)

2023全国大学生软件测试大赛开发者测试练习题99分答案&#xff08;ScapegoatTree2023&#xff09; 题目详情题解代码&#xff08;直接全部复制到test类中即可&#xff09; 提示&#xff1a;该题只需要分支覆盖得分即可&#xff0c;不需要变异得分 题目详情 题解代码&#xff0…

C++——string

目录 STL STL六大组件 标准库中的string类 string类 string类常用接口 构造函数 下标遍历[] 迭代器 范围for push_back() append() insert() operator pop_back() erase() reserve resize clear c_str() substr() find() rfind() find_first_of getline str…

腾讯云优惠券种类、领取方法及使用教程分享

腾讯云是国内领先的云计算服务提供商&#xff0c;为用户提供丰富的云计算产品和服务。为了吸引更多用户使用腾讯云的产品和服务&#xff0c;腾讯云会定期推出各种优惠券活动。本文将为大家介绍腾讯云优惠券的种类、领取方法及使用教程。 一、腾讯云优惠券种类介绍 腾讯云优惠券…