首页 > 其他分享 >Day 8 字符编码

Day 8 字符编码

时间:2024-10-17 20:00:11浏览次数:6  
标签:编码 解释器 文件 python l1 字符 Day

我这烂掉的十月,总之就是各种事情+偷懒,十月份都过去一半了,我才推进一天,总而言之言而总之 我是废物。

今天主要学了字符编码,学这种东西会让我有一种充实感,上节课复习都是在上周看了,不再赘述。字符编码的话主要就是各国语言之间的问题,但中间横空出世了一个全国通用的unicode,能够与市面上所有的语言转换,但有点费内存,于是又横空出世了一个utf-8,省内存,但只能与unicode转换,各有千秋吧!

下班!

目录

0 上节课复习

0.1 列表类型内置方法

  • 可变
  • 有序
  • 优先掌握:
    • 索引
    • 切片
    • 成员运算
    • 删除 del
    • for循环
    • 长度len
    • 追加 append
  • 需要掌握:
    • insert 在索引值前面插入
    • pop删除最后一个。也可以加入索引值删除指定的
    • remove 删除
    • count 统计某一元素出现次数
    • index 索引值 (阿拉伯数字,即出现的位置,当多个时以第一个为准)
    • clear 清空列表,为一个操作 不能直接输出
    • copy 复制列表
    • reverse 逆序
    • extend 加入元素 可以在后面接个列表
    • sort 按字母从小到大排序

0.2 元组类型内置方法

  • 没有可变不可变
  • 有序
  • 优先掌握:
    • 索引
    • 切片
    • 长度len
    • for循环
    • 成员运算
    • count 计算成员出现次数
    • index 计算成员首次出现的索引值

0.3 字典类型内置方法

  • 可变
  • 无序
  • 优先掌握:
    • 按键取值
    • 计算长度len
    • for循环
    • values keys items
    • 成员运算
    • 删除del
  • 需要掌握:
    • get 也是取值,好处是当键不存在时会报错,且若设有默认值会返回默认值
    • update 更新,有则更新,无责添加
    • fromkeys 创建列表,两个元素,第一个为键的列表,第二个为键的值,每个键的值都一样都是第二个元素
    • setdefault 增加一个键值对进去,如果该键已存在,则不改变原来的值

0.4 集合类型内置方法

  • 可变
  • 无序
  • 优先掌握:
    • 长度len
    • 成员运算 in or not in
    • 并集 | union
    • 交集 & intersection
    • 差集 - difference
    • 对称差集 symmetric_difference ^
    • 父集 > >=
    • 子集 < <=
    • ==
  • 需要掌握:
    • add 添加一个元素
    • remove 移除一个元素 不存在会报错
    • discard 移除一个元素 不会报错
    • update_difference 移除集合a中拥有的集合b的元素,如a=1,2,3 b=1,5,6,那么运算的结果为a = 2,3
    • isdisjoint 判断a与b之间交集是否为空,若为空,返回true 反之返回false

0.5 数据类型总结

可变 不可变
列表/字典/集合 整形/浮点型/字符串
有序 无序
字符串/列表/元组 字典/集合
一个值 多个值
整形/浮点型/字符串 元组/集合/列表/集合

0.6 拷贝

  • 拷贝,l2=l1。如果l2是l1的拷贝,则l1内部的任何类型元素发生变化,l2都会相应发生改变
  • 浅拷贝,l2=copy.copy(l1)。如果l2是l1的浅拷贝,则当l1内部的可变类型元素发生变化时,l2对应的元素会发生相应的变化;当l1内部的不可变类型元素发生了变化,则l2不会发生改变。
  • 深拷贝,l2=copy.deepcopy(l1)。如果l2是l1的深拷贝,则当l1内部的可变类型元素发生变化时,l2对应的元素不会发生相应变化;当l1内部的不可变类型元素发生变化时,l2不会发生变化;即无论l1内的任何类型元素发生变化,l2内的元素均不发生变化。

1 字符编码

1.1 文件编辑器存取文件的原理

  1. 打开编辑器就相当于启动了一个进程,是在内存中进行的,输入的数据也是在内存中的,断电后会消失
  2. 想要永久保存就需点击保存按钮,将其永远保存在硬盘中
  3. 在我么编写一个py文件时跟编写其他文件都一样,都是一堆字符罢了

1.2 python解释器执行py文件的原理

  • 第一阶段:python解释器启动,相当于启动了一个文件编辑器
  • 第二阶段:python解释器相当于文本解释器,打开test.py文件,将硬盘中的test.py文件内容读入到内存中
  • 第三阶段:python解释器会执行刚刚读入到内存中的test.py中的内容

1.3 python解释器与文本解释器的异同

  1. 都能干什么: 把硬盘中躺着的数据读入到内存中,并显示

  2. 不同:python解释器还会多执行解释的步骤

1.4 字符编码介绍

1.4.1 什么是字符编码

字符编码就是将人类的字符编码中计算机能够识别的数字,这种编码必须遵循一定的标准,该标准无非是数字与字符之间的对应关系,称之为字符编码表

1.4.2 涉及到字符编码的两个场景

  • 一个python文件是由字符编码组成的,其存取过程均涉及字符编码(此时python文件里的内容没有被执行,即处于python解释器执行py文件的前两步)
  • python文件中的数字类型字符串是由一串字符组成的(此时python文件里的内容已经被读取执行,即处于执行python解释器执行py文件的第三步)

1.4.3 字符编码的发展过程

  1. 美国人发明计算机 并制作的 ASCII编码表 但其只包括字母和数字
  2. 没有日语 汉语 韩语 于是就有了 shift_jis(日语) euc-kr(韩语) gbk(汉语)
  3. 但是不同的语言的编码不互通 即 你日本的代码(shift_jis)在我中国的电脑上(gbk)无法执行,会乱码,迫切需要一个全国统一的标准,此时unicode应运而生,ascii用1个字节(8位二进制)代表一个字符;Unicode常用2个字节(16位二进制)代表一个字符,生僻字需要用4个字节
  4. 但是你看,一个字母a 用ascii码只用占据一个字节 但用unicode需要两个字节,好浪费空间哦,为了节省空间,哎,我们的utf-8又应运而生了。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节
  5. 哎,相信细心的你我都发现了(没发现看上面标黄*-*),这个utf-8对应的是unicode,是两者之间转化的,ascii能编码成utf-8吗?gbk能吗?shift_jis能吗? 那必然不能了 这就是局限性,因此目前计算机中内存中的解码器仍然还是用的unicode

1.4.4 乱码分析

首先明确概念:

  • 存文件:文件从内存到硬盘
  • 读文件:文件从硬盘到内存

主要两种情况:

  • 存文件时就已经乱码:存文件时文件里有多种代码,但已某一种去存

  • 存文件不乱码而读文件时乱码:存文件是用的全国通用utf-8,但读文件时用的gbk,可解决,选择正确的解码方式即可

image-20241017191615055

2 总结

  • pycharm右下角控制的是你写入的代码字符以什么编码格式保存

  • coding:utf-8 控制的是python3作为文本编辑器的时候以什么编码格式读取内容文本,python3默认是utf-8的形式读取字符

  • python解释器解释语法

    解释定义变量的语法,因此会开辟一块内存空间放入这个变量,然后这个变量在python3中以unicode的形式存储,如字符x = ‘中’,被python3解释后在内存中会变成x = ‘ 1010101010101100’ ,理论上‘print(x)’相当于输出 ’ 1010101010101100‘,但是这个’1010101010101100‘对程序员来说看不懂,所以python3的创始人龟叔做了这个操作吧’1010101010101100‘编码按终端的编码格式输出编码后的结果,如‘上',终端可以把这个终端编码格式的二进制显示成中文

  • 为什么python3解释器要把变量以unicode的形式存储

标签:编码,解释器,文件,python,l1,字符,Day
From: https://www.cnblogs.com/chsun12/p/18472962

相关文章

  • 图论day64 :最短路径算法 | SPFA(Bellman_ford的队列优化版)、城市间货物运输 I、Ⅱ、Ⅲ
    图论day64:最短路径算法|SPFA(Bellman_ford的队列优化版)、94.城市间货物运输I(卡码网)【SPFA算法+邻接表优化】、95.城市间货物运输II(判断负权回路)、96.城市间货物运输III【已知有负权回路,该如何计算】、Bellman_ford算法思维导图汇总SPFA(Bellman_ford的队列优化版)94......
  • sky_take_out苍穹外卖开发(day-1)
    软件开发整体介绍:      开发流程:             需求分析:                    需求规格说明书                    产品原型             设计:                   ......
  • 字符串常量池
     执行 newString("hello") 可能创建 一个或两个对象,具体情况取决于 "hello" 是否已经存在于字符串常量池中。情况分析如果常量池中已存在 "hello" 字符串:newString("hello") 会直接在堆中创建一个新的 String 对象,并且这个对象的值指向常量池中的 "hello"。......
  • Day17什么是方法
    Day17什么是方法何谓方法?System.out.println(),那么它是什么呢?答:System是类;out是指System输出的对象,println()是方法___()是方法Java方法是语句的集合:它们在一起执行一个功能。1.方法是解决一类问题的步骤的有序组合2.方法包含于类或对象中3.方法在程序......
  • NOIP2024集训Day53 图论
    NOIP2024集训Day53图论A.[BZOJ4144ANOOZ2014]Petrol首先注意到起点和终点都是加油站。假设中途经过某个非加油站的点\(u\),\(u\)连到\(v\),离\(u\)最近的加油站是\(x\),那么从\(u\)到\(x\)加油后回到\(u\),再到\(v\)一定不比直接从\(u\)到\(v\)差。因为\(u......
  • 【Adobe】Adobe Media Encoder(ME)视频和音频媒体文件的编码和导出下载安装
    目录一、AdobeMediaEncoder发展历史1.1起源与早期发展1.2独立软件的形成1.3广泛应用与持续创新二、AdobeMediaEncoder功能介绍2.1高效编码与导出2.2自定义输出设置2.3强大的媒体处理能力三、AdobeMediaEncoder系统要求3.1操作系统要求3.2硬件要求......
  • DAY53WEB 攻防-XSS 跨站&SVG&PDF&Flash&MXSS&UXSS&配合上传&文件添加脚本
    知识点:1、XSS跨站-MXSS&UXSS2、XSS跨站-SVG制作&配合上传3、XSS跨站-PDF制作&配合上传4、XSS跨站-SWF制作&反编译&上传XSS分类:https://www.fooying.com/the-art-of-xss-1-introduction/(失效了)MXSS现在基本上见不到UXSS:UniversalCross-SiteScripting针对浏览器的漏......
  • 机器学习篇-day09-支持向量机SVM
    一.支持向量机介绍支持向量机介绍SVM全称是SupportedVectorMachine(支持向量机)即寻找到一个超平面使样本分成两类,并且间隔最大。是一种监督学习算法,主要用于分类,也可用于回归与逻辑回归和决策树等其他分类器相比,SVM提供了非常高的准确度优缺点优点:适合小样本、高......
  • 下载安装使用 Adobe Media Encoder (ME)专业视频编码软件
    目录一、软件简介1.1软件概述1.2功能特色1.3新功能亮点二、下载三、安装ME3.1解压安装包3.2运行安装程序3.3完成安装3.4自定义工作空间3.5导入视频与设置输出3.6开始编码一、软件简介1.1软件概述AdobeMediaEncoder(简称ME)是Adobe公司推出的一款......
  • 枚举值转换(字符串转换为枚举和整数转换为枚举)
    枚举值转换(字符串转换为枚举和整数转换为枚举) 假设定义了一个这样的枚举类型:enum MyEnum{aa = 1,bb = 2 } 1、字符串转换为枚举:string strA = "aa";MyEnummyEnum = (MyEnum)Enum.Parse(typeof(MyEnum),strA);上面的方法是区分大小写的,也就是说,如......