Python中的字符编码
字符编码
一、计算机基础
- cpu:控制程序的运行(从内存中取出文本编辑器的数据读入内存)
- 内存:运行程序(经cpu操作后,内存中含有文本编辑器的数据)
- 硬盘:存储数据(文本编辑器)
二、文本编辑器存取文件的原理
- 打开编辑器就是启动了一个进程,是在内存中的,所有,用编辑器编写的内容也都是存放于内存中的,断电后数据消失。
- 要想永久保存,需要点击保存按钮,编辑器把内存的数据刷到了硬盘上。
- 我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已。
三、Python解释器执行py文件的原理
- 第一阶段:Python解释器启动,此时就相当于启动了一个文本编辑器
- 第二阶段:Python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:Python的解释性,决定了解释器只关心文件内容,不关心文件后缀名)
- 第三阶段: Python解释器解释执行刚刚加载到内存中test.py的代码( ps:在该阶段,即真正执行代码时,才会识别Python的语法,执行文件内代码,当执行到name="egon"时,会开辟内存空间存放字符串"egon")
四、Python解释器与文本编辑器的异同
- 相同点:Python解释器是解释执行文件内容的,因而Python解释器具备读py文件的功能,这一点与文本编辑器一样。
- 不同点:文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不会理会Python的语法,而Python解释器将文件内容读入内存,是为了执行Python代码、会识别Python的语法。
五、字符编码
1、字符编码
字符编码:二进制和我们所认识的字符之间的相互转换的一个过程。
最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系。
之后中国人规定了自己的标准gb2312编码,日本人规定了Shift_JIS编码,韩国人规定了Euc-kr编码。
2、什么情况会出现乱码
当编码格式不统一的时候就会出现乱码。
文本编辑器支持的是utf8,你输入的是gbk --> 文件的存储
文件存储用了utf8,但是下次打开用了gbk --> 文件的读取
3、乱码的两种情况
中文的文本编辑器只认识中文,然后你输入了日文 --> 乱码 # encode编码
文本编辑器存储了中文(文件),但是你用日本的编辑器打开这个文件 --> 乱码 # decode 解码
4、解决乱码
什么格式存储,就什么格式读取,就不会乱码
文件的三种打开模式
# 'r'模式:只读模式
f = open('test.py', 'r', encoding='utf-8')
print(f.read()) # 读取文件所有内容
print(f.readable()) # 文件是否可读
print(f.readline()) # 一行一行读取文件
print(f.readlines()) # 读取文件所有内容保存为列表
f.close
# 'w'模式:只写模式
f = open('test.py', 'w', encoding='utf-8')
s = 'asdaczca'
f.write(res) # 清空后再写
print(f.writeable()) # 文件是否可写
f.writelines(['aasda', 'adsda'])
f.close()
# ’a'模式:追加模式
f = open('test.py','a', encoding='utf8')
f.write('nick handsome') # 文件末追加
f.close()
# with管理上下文
with open('test.py', 'r', encoding='utf-8') as f:
print(f.read)