了解字符编码的前提
1.运行程序的三大核心硬件
CPU、内存、硬盘
运行一个程序:
1 将程序代码从硬盘读入内存,
2 CPU从内存中取出代码,转换为指令
强调:程序运行过程中产生的数据一定是最先存放于内存中的
2运行python程序的三个阶段:python test.py
1 先启动python解释器
2 将test.py的内容当作普通字符读入内存
3 python解释器解释执行读入内存的代码,识别python的语法
python解释器运行程序的前两个阶段跟文本编辑器一模一样只有第三个阶段不同
3
8bit= 1Bytes
1024Bytes=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB
1024TB=1PB
字符编码
人操作计算机使用人类认识的字符,而计算机存放的都是二进制数字
所以人在往计算机里输入内容的时候,必然发生:
人的字符 ------> (字符编码表) ------> 二进制数
这个过程就称之为字符编码
保存之后需要取出
二进制数 ------------------> 人类字符
ASCII:用(8位bit二进制数)1Bytes对应一个英文字符
GBK:用2Bytes对应一个中文字符,1Bytes对应一个英文字符
unicode:用2Bytes对应一个字符
必须满足两大特点:
1 能够兼容万国字符
2 与老字符编码都有一种数字与数字的对应关系
与全世界所有的字符编码都有映射关系,这样就可以转换成任意国家的字符编码
utf-8:Unicode Transformation Format
当我们需要将数据基于网络进行发送时则必须将数据转成二进制
GBK,UTF-8 等都可以但是由于UTF-8兼容网络并且节省空间,所以更推荐使用UTF-8
当你需要将数据从内存写到硬盘,也推荐使用UTF-8
一个中文字符:3Bytes
一个英文字符:1Bytes
强调:
将unicode格式的数字转换为utf-8格式的数字叫encode编码
将utf-8格式发数字转换为unicode格式的数字叫decode解码
encode的使用场景
需要文本写入到硬盘
需要将文本基于网络发送时
乱码
1 存取不一致
2 存的时候,出现了编码表中不存在的字符
保证不乱码的关键:
存取一致
强调 此时计算机只使用unicode与字符的对应关系
使用兼容万国的编码表
内存中采用Unicode,浪费空间来换取可以转换成任意编码(不乱码),硬盘可以采用各种编码,如utf-8 保证存放于硬盘或者基于网络传输的数据量很小,提高传输效率与稳定性
文件处理
1 什么是文件
文件时操作系统为用户/应用程序提供的一种操作硬盘的抽象单位
2 为何要用文件
用户/应用程序对文件的读写操作会由操作系统转换成具体的硬盘操作所以用户/应用程序可以通过简单的读/写开间接地控制复杂的硬盘的存取操作实现将内存中的数据永久保存到硬盘中
3如何用文件
f = open(r"文件路径",mode="rt",encoding="utf-8")
打开文件,拿到一个文件对象f,f就相当于一个遥控器,可以向操作系统发送指令
f.read() 读写文件,向操作系统发送写文件指令
f.close() 关闭文件,回收操作系统的资源
强调:一定要在程序结束前关闭打开的文件
上下文管理:
with open(r"文件路径",mode="rt",encoding="utf-8") as f:
pass
一 文件的打开模式
r:只读模式(默认的)
w:只写模式
a:只追加写模式
二 控制读写文件单位的方式(必须与r/w/a连用)
t:文本模式(默认的),一定要指定encoding参数
优点:操作系统会将硬盘中的二进制数字解码成unicode然后返回
强调 只针对文本有效
b:二进制模式,一定不能指定encoding参数
一 r:只读模式(默认模式)
当文件不存在时,会报错
当文件存在时,文件指针指向文件的开头
二 w:只写模式
当文件不存在时,新建一个空文件
当文件存在时,清空文件内容,文件指针跑到文件的开头
三 a:只追加写模式
当文件不存在时,新建一个空文件,文件指针跑到末尾
当文件存在时,文件指针跑到文件的末尾
四 +:可读可写模式
不能单独使用,与r\w\a连用
r+ == r+t 直接写入 会把元数据覆盖掉
w+ == w+t 打开就清空 所以读不到
a+ == a+t 打开就移动光标到末尾 也读不到
可读可写字节模式
r+b 直接写入 会把元数据覆盖掉
w+b 打开就清空 所以读不到
a+b 打开就移动光标到末尾 也读不到
文件的其他操作
f.closed 文件是否关闭
f.encoding 获取文件的编码方式