字符编码
引入
字符串类型、文本类型都是由字符组成的,但凡涉及到字符的存取,都需要考虑字符编码的问题。
所有软件都是运行硬件之上,与运行软件相关三大核心硬件为CPU、内存、硬盘,我们需要知道的是:
1、运行软件前,软件的代码及相关数据都是存放于硬盘中
2、任何软件启动都是将数据从硬盘中读入内存,然后CPU从内存中读取指令并执行
3、软件运行过程中产生数据最先都是存放于内存中,若想永久保存产生的数据,则需要将数据由内存写入到硬盘中
什么是字符编码
人类与计算机交互时,用的都是人类能够读懂的字符,如中文字符,英文字符等,而计算机只能识别二进制数,二进制数即由0和1组成的数字,
字符编码中的编码指的是翻译或者转换的意思,即将人能理解的字符翻译成计算机能识别的数字
字符编码的发展史
阶段一
现代计算机起源于美国,所以最先考虑仅仅是让计算机识别英文字符,于是诞生了ASCII表
阶段二
为让计算机能够识别自己国家的字符外加英文字符,各个国家都制定了自己的字符编码表
中国定制了GBK,特点只有中文字符、英文字符与数字的一一对应关系
日本定制了Shift_JIS,特点只有日文字符、英文字符与数字的一一对应关系
韩国定制了Euc-kr,特点只有韩文字符、英文字符与数字的一一对应关系
阶段三
希望计算机允许我们输入万国字符均可识别、不乱码定制一个兼容万国字符的编码表
即unicode,特点存在所有语言中的所有字符与数字的一一对应关系,即兼容万国字符,unicode码只在内存中起作用
阶段四
由于unicode固定使用两个字节来存储一个字符,如果多国字符中包含大量的英文字符时,使用unicode格式存放会额外占用一倍空间,当我们由内存写入硬盘时会额外耗费一倍的时间,所以将内存中的unicode二进制写入硬盘或者基于网络传输时必须将其转换成一种精简的格式,这种格式即utf-8(全称Unicode Transformation Format,即unicode的转换格式)
编码与解码
将人类能够读懂的语言转为计算机能够读懂的语言,把字符串转为二进制的过程,都称为编码encode
将计算机能够读懂的语言转为人类能够读懂的语言,把二进制转为字符串的过程,都称为解码decode
- 使用
ss = '你们好,我是小漂亮'
#编码
e=ss.encode('utf8')#参数指定格式
print(e)#b'\xe4\xbd\xa0\xe4\xbb\xac\xe5\xa5\xbd\xef\xbc\x8c\xe6\x88\x91\xe6\x98\xaf\xe5\xb0\x8f\xe6\xbc\x82\xe4\xba\xae'
#解码
d=e.decode('utf8')#参数指定格式
print(d)#你们好,我是小漂亮
'''总结:用什么编码格式('utf8'),那么就要用什么解码格式('utf8')'''

- 如何防止乱码
我们学习字符编码就是为了存取字符时不发生乱码问题:
1. 保证存的时候不乱:在由内存写入硬盘时,必须将编码格式设置为支持所输入字符的编码格式
2. 保证存的时候不乱:在由硬盘读入内存时,必须采用与写入硬盘时相同的编码格式
文件处理
引入
应用程序运行过程中产生的数据最先都是存放于内存中的,若想永久保存下来,必须要保存于硬盘中。应用程序若想操作硬件必须通过操作系统,而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念,用户或应用程序对文件的操作,就是向操作系统发起调用,然后由操作系统完成对硬盘的具体操作。
文件操作
- 打开文件
- 操作文件
- 关闭文件
#方式一
f=open('a.txt','r',encoding='utf8')#打开文件,由应用程序向操作系统发起系统调用open(...),操作系统打开该文件
print(f.read())#调用文件对象下的读/写方法,会被操作系统转换为读/写硬盘的操作
f.close()#向操作系统发起关闭文件的请求,回收系统资源
#需手动添加关闭文件
#方式二
with open('a.txt','r',encoding='utf8') as f1:
print(f1.read())
#with上下文管理器可自动关闭文件


