[oeasy]python0132_[专业选修]utf-8_unicode_transformation_format_8_编码方式
utf-8
回忆上次内容
- 上次再次输出了大红心♥
- 找到了红心对应的编码
- 黑红梅方都对应有编码
- 原来的编码叫做 ascii️
\u
这种新的编码方式叫unicode- 包括了 中日韩字符集等 各书写系统的字符集
- 但是有个问题
- 拜这个字
- 在字节中应该是b"\x62\xdc"两个字节
- 该如何理解b"\x62\xdc"这两个字节呢?🤔
- 究竟是"拜"
- 还是"bÜ"呢?
在文件系统中验证
- 首先进入 vi
- 然后在插入模式下写一个
一
- 点击桌面上的sougo图表
- 在右下角的键盘位置选择中文
- 然后就可以输入中文了
- :%!xxd
一
字- 存储的状态是
- e4b880
- 三个字节
- 并不是unicode对应的
- 4e00
- 两个字节
- 存储的状态是
- 我们还是得区分一下概念
字符集和字符集编码
-
字符集(Character-Set)是
- 指的是字符和序号之间的对应关系
- 函数是
- ord
- chr
-
字符集编码(Character-Set Encoding)
- 指的是把字符集里面的所有字符
- 放到计算机的字节里
- 函数是
- encode
- decode
-
ascii、gb2312、BIG5
- 既是字符集
- 又是字符编码
- unicode如何呢?
unicode
- 一般来讲unicode是字符集
- 可以用ord和chr
- 但Unicode一般不做字符集编码
- 用字符集什么来进行字符编码呢?
utf-8
- utf-8 是一种可变长度的字符编码格式
- 有的时候 1 字节 利用他省空间
- 有的时候 2 字节 利用他很平衡
- 有的时候 3 字节 利用他范围广
- 再往后 利用的更是他范围广
- 这不就两方面好处都得到了么
- utf-8 的意思是
- Unicode Transformation Format – 8-bit
- 这和 unicode 到底有什么区别呢?
存储规则
- Unicode 是
字符集
- Universal Coded Character Set
- 字符集:为每一个
字符
分配一个唯一的数字ID
- (学名为码位 / 码点 / Code Point / 字符的身份证号)
- 可以在 https://home.unicode.org/
- 找到每一个字符的唯一编码
- utf-8 是
字符集编码方案
- Unicode Transformation Format – 8-bit
- 编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)
- 而且读到字符之后
- 系统就知道这个到底是几个字节存储的
具体编码
- 那这个东西怎么具体存储和操作呢?
- 一(4E00) 在上图中
- 属于第三行的范围
- 从 0800-FFFF
- 所以三个字节
- 如下图套入模板
- 具体存储的状态呢?
具体字节状态
- :%!xxd
- 说明我们用的确实是utf-8编码
- 可以解码回来吗?
- utf-8 解码 E4B080 转化为 unicode 编码是 4E00
- 后面的
0a
是 换行LineFeed
- 或者叫做
NL(NewLine)
- 如果是两个
一
呢
动手
- 两个字符相同的
- 得到两个同样的三字节utf-8存储
- 以及最后的
0a
依然是 换行LineFeed
- 或者叫做
NL(NewLine)
- 或者叫做
- 可以在反汇编指令层面中看到么?😄
反编译
- :%!xxd
- 转化为字节码状态
- 汉字确实可以在字节码状态中观察到
编码解码
- 第一次编码
- 把汉字编码为
unicode
- 具体就是把
一
编码为 unicode 值0x4e00
这个编号
- 把汉字编码为
- 第二次编码
- 把
unicode
值编码为utf-8
值 - 具体就是把 unicode 值
0x4e00
编码为0xe4b880
- 可以落实到字节里
- 把
-
第一次解码
- 把
utf-8
解码为unicode
- 具体就是把 utf-8 值
0xe4b880
解码为0x4e00
- 把字节还原为序号
- 把
-
第二次解码
- 把
unicode
解码为汉字 - 具体就是把
0x4e00
解码为一
- 找到序号对应的字符
- 把
-
unicode编码是utf-8存储形式和具体汉字中间的桥梁
验证编码
- 原始字符串
- “一”
- 查看原始字符串utf-8编码
- “一”.encode(“utf-8”)
- 给utf-8编码解码
- b"\xe4\xb8\x80".decode(“utf-8”)
- 先编码再解码
- “一”.encode(“utf-8”).decode(“utf-8”)
- 先解码再编码
- b"\xe4\xb8\x80".decode(“utf-8”).encode(“utf-8”)
- b"\xe4\xb8\x80"是几个字节的类型呢?
字节序列类
- 前缀 b 表示 byte 字节
- 后面的是 bytes类型对应的 字节序列
- \x 是前缀
- b"\xe4\xb8\x80"是三个字节的序列
默认编码
- utf-8 是系统默认的编码格式
- 一般都是这种编码格式
- 这一个字符就对应三个字节
- 可以用长度来描述字符么?
字符长度
- len()函数
- 可以衡量出字符串的长度
- 也可以衡量出编码后字节序列的长度
- ascii[0,127] 字符 的长度
- 就是字节的长度
- 汉字呢?
汉字
- 字母
a
对应着一个字节- 汉字
一
对应着三个字节
- 汉字
- 这个unicode的编码空间
- 究竟是怎么安排的呢?
排好座次
- 所有unicode字符 被分成了4档
- ascii
- 1 字节
- 后面的字符有可能用
- 2 字节
- 3 字节
- 4 字节
- ascii
- 0开头的
- ascii
- 英文字符和数字占据最大范围兼容
- 10开头的
- 2 字节
- 主要是拼音符号文字
- 拉丁
- 希腊
- 西里尔
- 等等
- 110开头的
- 3 字节范围内
- 首先是印度
- 然后是杂项
- 然后是符号
- 日文假名
- 然后是中日韩 CJK
- 3 字节范围内
- 11110开头的
- 4 字节
- 表情符号emoji😈
- 各种扩展集
极大扩展
- unicode字符集 开始逐渐流行
- utf-8所代表的存储编码也开始流行
- 一旦一种编码在世界上开始流行
- 他就会挤压其他的编码方式的生存空间
- 到了 2020 年 95%的网页使用 unicode 编码
- 到了 2021 已经达到了 97.4%
- 他就会挤压其他的编码方式的生存空间
- 感觉这是全球化一体最终的编码方式
- https://w3techs.com/technologies/overview/character_encoding
字符大战终局
- 关于编码的世界大战
- 分久必合
- 最终的胜利者是unicode和utf-8
- 他们彼此也可以相互转化
相互转化
-
unicode形式
- “\u4e00”
-
把unicode编码按照utf-8编码
- “\u4e00”.encode(“utf-8”)
-
先把unicode编码为utf-8,再解码回unicode
- “\u4e00”.encode(“utf-8”).decode(“utf-8”)
-
把utf-8编码解码回unicode编码
- b"\xe4\xb8\x80".decode(“utf-8”)
-
把utf-8编码先解码回unicode编码,再编码为utf-8
- b"\xe4\xb8\x80".decode(“utf-8”).encode(“utf-8”)
-
曾经掌握了 ascii 码和 ascii 字符的转化方法
-
也要掌握 unicode 和 utf-8 双向转化的方法
- gb2312系列又如何了呢?
gbk的演化
- 80年的gb2312
- 95年的gbk
- 05年有了gb18030
- 全称:国家标准 GB 18030-2005《信息技术中文编码字符集》
- 是中华人民共和国现时最新的内码字集
- 是 GB 18030-2000《信息技术信息交换用汉字编码字符集基本集的扩充》的修订版
- 有多少字符了呢?
字符集
- GB 18030 与 GB 2312-1980 和 GBK 兼容
- 共收录汉字70244个
- 与 utf-8 相同
- 采用多字节编码
- 每个字可以由 1 个、2 个或 4 个字节组成
- 编码空间庞大
- utf-8标准海纳百川
- GB18030用的人很少
- 但始终依然存在
- GB18030有什么作用呢?😄
乱码问题
- 有的时候还会遇到 gb18030 编码的文档
- 用 utf-8编码方式
- 打开 gb18030编码 的文件
- 就会乱码
- 这个时候可以在 vim 中使用命令
:edit ++enc=gb18030
- 可以解决问题
- gb18030 用的人少
- 有用的人少的好处
- 如果只会用utf-8解码
- 那么gb18030本身就构成了加密系统
- 只有懂汉语并且懂编码才能看懂
- 不懂的话只能见到乱码
- 想要自动翻译都不行
总结
- 这次了解了
unicode
和utf-8
unicode
是字符集utf-8
是一种可变长度的编码方式utf-8
是实现unicode
的存储和传输的现实的方式
-
unicode
让字符范围得到了极大扩展unicode
到底还扩展出什么好玩的字符呢?🤔
-
我们下次再说!👋
-
蓝桥->https://www.lanqiao.cn/courses/3584
-
github->https://github.com/overmind1980/oeasy-python-tutorial
-
gitee->https://gitee.com/overmind1980/oeasypython
相关文章:

[oeasy]python0132_[专业选修]utf-8_unicode_transformation_format_8_编码方式
utf-8 回忆上次内容 上次再次输出了大红心♥ 找到了红心对应的编码黑红梅方都对应有编码 原来的编码叫做 ascii️ \u这种新的编码方式叫unicode包括了 中日韩字符集等 各书写系统的字符集 但是有个问题 拜这个字在字节中应该是b"\x62\xdc"两个字节 该如何理解b&qu…...

DNS 的解析过程以及相关问题
文章目录DNS解析过程DNS 为什么用 UDP简单说下怎么实现 DNS 劫持谈谈你对域名缓存的了解DNS解析过程 浏览器首先看看自己浏览器缓存有没有对应的IP记录,同时还要查询一下主机本地文件里面有没有对应的记录,如果有记录就没必要进行后面的步骤了。 浏览器…...
个人情况-单词练习
目录 前言原文兴趣爱好特长专业习惯理想志向情境常用单词性别家庭成员正面性格前言 加油 原文 1.come from… 来自…… I come from Shanghai. 我来自上海/我是上海人。 2.born[bɔrn]adj.出生的 be born into + 家庭 出身……的家庭 George was born into a poor fami…...

python天狗吃月 青少年编程电子学会python编程等级考试一级真题解析2022年9月
目录 python天狗吃月 一、题目要求 编程实现 二、解题思路 1、图形分析...
JAVA做语言国际化
项目场景: 问题描述 提示:这里描述项目中遇到的问题: 例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据 APP 中接收数据代码: Overridepublic void run() {bytes mmInStream.read(buff…...
面试题 16.19. 水域大小
题目链接 面试题 16.19. 水域大小 mid 题目描述 你有一个用于表示一片土地的整数矩阵 land,该矩阵中每个点的值代表对应地点的海拔高度。若值为 0 则表示水域。由垂直、水平或对角连接的水域为池塘。 池塘的大小是指相连接的水域的个数。 编写一个方法来计算矩阵…...
在vscode中切换分支,显示已经删除的远程分支
运行命令:修剪远程分支 git remote prune origin 然后远程的已经删除的分支就不见了。...

森林督查违法图斑内业报告高效制作实践技术
Python已成为最热门的编程语言之一,与arcpy、geopandas等行业软件包相结合,能极大程度地减轻森林督查违法图斑内业报告制作的工作量,显著提升工作效率。为了提升广大从业人员在森林违法图斑内业报告制作等方面的技能,内容主要包括…...
华为OD机试-日志限流-2022Q4 A卷-Py/Java/JS
某软件系统会在运行过程中持续产生日志,系统每天运行N单位时间,运行期间每单位时间产生的日志条数保行在数组 records中。records[i]表示第i单位时间内产生日志条数。 由于系统磁盘空间限制,每天可记录保存的日志总数上限为total条。 如果一天…...

ChatGPT能胜任高级程序员吗?
与开发人员信任的其他软件开发工具不同,AI工具在训练、构建、托管和使用方式等方面都存在一些独特的风险。 自2022年底ChatGPT发布以来,互联网上便充斥着对其几乎相同比例的支持和怀疑的论调。不管你是否喜欢它,AI正在逐步进入你的开发组织。…...
effective c++ item 25-29
item25:自定义swap函数 namespace std{template<typename T>void swap(T& a, T& b){T temp(a); // T要满足拷贝构造和拷贝赋值a b;b temp; } }1、Pimpl 2、自定义swap item26:尽可能延后变量的定义 case 1: temp j; for(int i 0; i < n; …...

MasterCAM实体旋转命令相关几个问题:曲线相交于边缘等
MasterCAM版本:2022 目的:通过旋转画杯子边缘主体 内外环直径分别是:56、60mm 命令:实体 - 旋转 问题: 一、处理实体期间错误parasolid(r) kernel 界面错误PK 错误代码:942-曲线相交于边缘 对应参数&a…...

p标签需要设置宽高吗?不用
Dusk: # 引用补丁,开头必须以 -javaagent: 开头,后面跟着补丁的绝对路径(可根据你实际的位置进行修改),注意路径一定要填写正确,且不能包含中文,否则会导致 IDEA 无法启动-javaagent:D:/ja-netfilter/ja-ne…...

Andorid 事件分发机制案例实操与解析
文章目录为什么要理解Android事件分发机制?滑动冲突类问题我们以什么开始?代码如下:activity xml 代码:Activity代码:item_user.xml代码修改后代码如下:Activity xmlactivity代码item_gift.xml问题出现了An…...

Git 版本控制/项目迭代
一、Git的作用/为什么要进行版本控制? 什么是项目迭代? 搞开发的时候我们不是一次性就做好平台的所有功能,而是先上线一个功能差不多的版本让用户用着,然后不断迭代、修改,上线新的版本,所以一个项目就会…...
智慧农业大数据项目建设方案
智慧农业大数据项目建设方案 目录 项目概述.................................... 6...

【数据结构专栏】动态扩容顺序栈详解
💌 博客内容:顺序栈的原理详解 😀 作 者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前段,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家:这…...

Linux命令·ifconfig
许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改。Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config)。通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。依赖于ifconfig命令中使…...
大器晚成我服刘邦,48岁才开始创业
读史使人明智,周末放下手机,静下心来读点人文历史。大器晚成我最佩服刘邦,48岁才开始创业 。在此之前,他是一个出身平凡的农民,早年曾多次失败和受挫。刘邦最后能够战胜项羽,常常让人觉得匪夷所思ÿ…...
AndroidStudio快捷键
动态演示:https://blog.csdn.net/weixin_67276852/article/details/124159843?spm1000.2115.3001.6382&utm_mediumdistribute.pc_feed_v2.none-task-blog-hot-11.pc_personrec&depth_1-utm_sourcedistribute.pc_feed_v2.none-task-blog-hot-11.pc_personre…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...