当前位置: 首页 > news >正文

[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 字节

图片描述

  • 0开头的
    • ascii
    • 英文字符和数字占据最大范围兼容
  • 10开头的
    • 2 字节
    • 主要是拼音符号文字
      • 拉丁
      • 希腊
      • 西里尔
      • 等等
  • 110开头的
    • 3 字节范围内
      • 首先是印度
      • 然后是杂项
      • 然后是符号
      • 日文假名
      • 然后是中日韩 CJK
  • 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本身就构成了加密系统
    • 只有懂汉语并且懂编码才能看懂
    • 不懂的话只能见到乱码
    • 想要自动翻译都不行

总结

  • 这次了解了unicodeutf-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&#xff1a;自定义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版本&#xff1a;2022 目的&#xff1a;通过旋转画杯子边缘主体 内外环直径分别是&#xff1a;56、60mm 命令&#xff1a;实体 - 旋转 问题&#xff1a; 一、处理实体期间错误parasolid(r) kernel 界面错误PK 错误代码&#xff1a;942-曲线相交于边缘 对应参数&a…...

p标签需要设置宽高吗?不用

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

Andorid 事件分发机制案例实操与解析

文章目录为什么要理解Android事件分发机制&#xff1f;滑动冲突类问题我们以什么开始&#xff1f;代码如下&#xff1a;activity xml 代码&#xff1a;Activity代码&#xff1a;item_user.xml代码修改后代码如下&#xff1a;Activity xmlactivity代码item_gift.xml问题出现了An…...

Git 版本控制/项目迭代

一、Git的作用/为什么要进行版本控制&#xff1f; 什么是项目迭代&#xff1f; 搞开发的时候我们不是一次性就做好平台的所有功能&#xff0c;而是先上线一个功能差不多的版本让用户用着&#xff0c;然后不断迭代、修改&#xff0c;上线新的版本&#xff0c;所以一个项目就会…...

智慧农业大数据项目建设方案

智慧农业大数据项目建设方案 目录 项目概述.................................... 6...

【数据结构专栏】动态扩容顺序栈详解

&#x1f48c; 博客内容&#xff1a;顺序栈的原理详解 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前段&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&#xff1a;这…...

Linux命令·ifconfig

许多windows非常熟悉ipconfig命令行工具&#xff0c;它被用来获取网络接口配置信息并对此进行修改。Linux系统拥有一个类似的工具&#xff0c;也就是ifconfig(interfaces config)。通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。依赖于ifconfig命令中使…...

大器晚成我服刘邦,48岁才开始创业

读史使人明智&#xff0c;周末放下手机&#xff0c;静下心来读点人文历史。大器晚成我最佩服刘邦&#xff0c;48岁才开始创业 。在此之前&#xff0c;他是一个出身平凡的农民&#xff0c;早年曾多次失败和受挫。刘邦最后能够战胜项羽&#xff0c;常常让人觉得匪夷所思&#xff…...

AndroidStudio快捷键

动态演示&#xff1a;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…...

机械硬盘的工作原理

每个磁盘的表面都有高速扫过的记录磁头。 每个磁盘上都覆盖着一层薄薄的微小的磁化金属粒。 数据以一种肉眼无法分辨的形式存在。很多组微小颗粒形成的磁化图案记录形成了数据。每一组&#xff0c;又称之为比特&#xff08;bit&#xff09;。 所有微粒都按照自身的磁性排列…...

掌握TypeScript:10个最佳实践提高代码质量

TypeScript 是一种强类型的 JavaScript 超集&#xff0c;提供了很多优秀的工具和语言特性&#xff0c;可以帮助开发者提高代码质量和开发效率。在本文中&#xff0c;我们将介绍 10 个 TypeScript 最佳实践&#xff0c;帮助初级和中级的 Web 前端开发工程师更好地使用 TypeScrip…...

【面试】Kafka面试题

文章目录1、Kafka是什么&#xff1f;2、partition的数据文件&#xff08;offffset&#xff0c;MessageSize&#xff0c;data&#xff09;3、数据文件分段 segment&#xff08;顺序读写、分段命令、二分查找&#xff09;4、负载均衡&#xff08;partition会均衡分布到不同broker…...

【C++学习】map和set的使用

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; map和set的使用&#x1f308;关联式容器⚡键对值&#x1f308;set⚡构造函数⚡增删查改&#x1f308;…...

企业电子招投标采购系统——功能模块功能描述+数字化采购管理 采购招投标

​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外…...

4.6--计算机网络之TCP篇之TCP的连接建立--(复习+深入)---好好沉淀,加油呀

1.TCP 三次握手过程是怎样的&#xff1f; TCP 是面向连接的协议&#xff0c;所以使用 TCP 前必须先建立连接&#xff0c;而建立连接是通过三次握手来进行的 1.一开始&#xff0c;客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口&#xff0c;处于 LISTEN 状态 2…...

Pytorch 数据产生 DataLoader对象详解

目录 1、Pytorch读取数据流程 2、DataLoader参数 3、DataLoader&#xff0c;Sampler和Dataset 4、sampler和batch_sampler 5、源码解析 6、RandomSampler(dataset)、 SequentialSampler(dataset) 7、BatchSampler(Sampler) 8、总结 9、自定义Sampler和BatchSampler 研…...

Linux文件系统介绍

一、简介 文件系统就是分区或磁盘上的所有文件的逻辑集合。 文件系统不仅包含着文件中的数据而且还有文件系统的结构&#xff0c;所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。 不同Linux发行版本之间的文件系统差别很少&#xff0c;主要表现在…...

Java高频必背面试题基础篇02

一、Java 语⾔中关键字 static 的作⽤是什么&#xff1f; static 的主要作⽤有两个&#xff1a; &#xff08;1&#xff09;为某种特定数据类型或对象分配与创建对象个数⽆关的单⼀的存储空间。 &#xff08;2&#xff09;使得某个⽅法或属性与类⽽不是对象关联在⼀起&#xf…...

蓝桥杯—stm32g431rbt6串口中断和定时器输出pwm学习

目录 串口中断 定时器中断 输出pwm 串口中断 配置异步模式&#xff0c;使能中断&#xff0c;选择波特率。 串口接收中断开启 HAL_UART_Receive_IT(&huart1,data, 3); 回调函数&#xff1a; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huar…...