Python中的字符编码

字符编码

一、计算机基础

  1. cpu:控制程序的运行(从内存中取出文本编辑器的数据读入内存)
  2. 内存:运行程序(经cpu操作后,内存中含有文本编辑器的数据)
  3. 硬盘:存储数据(文本编辑器)

二、文本编辑器存取文件的原理

  1. 打开编辑器就是启动了一个进程,是在内存中的,所有,用编辑器编写的内容也都是存放于内存中的,断电后数据消失。
  2. 要想永久保存,需要点击保存按钮,编辑器把内存的数据刷到了硬盘上。
  3. 我们编写一个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)
原文地址:https://www.cnblogs.com/17vv/p/11316141.html