学之前需要掌握的一些知识:
1.计算机硬件软件的一些关系:
2.文本编辑器存取文件的原理
3.python解释器执行.py文件的一些原理
4.总结python解释器和文本编译器的一些类同
二.什么是字符编码:
1. 一个字符如何一一对应一个特定的数字标准
必须经过一个过程:
字符--------(翻译过程)------->数字
2.字符编码的演变:
1️⃣美国创造了计算机,所以最先的字符编码是基于英文的ASCII码
2️⃣中国也想要用计算机,但是没有基于中文的字符编码,所以创造了基于中文和英文的 GBK编码
GBK:2Bytes代表一个中文字符,1Bytes表示一个英文字符 为了满足其他国家,各个国家纷纷定制了自己的编码 日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里
3️⃣之后世界各国都纷纷制定个适用于本国的字符编码,但是在多语言的版本中出现了乱码,各国为了解决这个问题,于是创造出了
unicode(定长)(统一用二个字节表示一个字符)
1、能够兼容万国字符
2、与全世界所有的字符编码都有映射关系,这样就可以转换成任意国家的字符编码
很明显对于通篇都是英文的文本来说,unicode的式无疑是多了一倍的存储空间(二进制最终都是以电或者磁的方式存储到存储介质中的)
于是就演化出了 utf-8,对英文字符只用1Bytes表示,对中文字符用3Bytes,对其他生僻字用更多的Bytes去存
总结:内存中用unicode来作为编码器浪费了空间,但是能够转换各个国家的字符编码(不乱码)。uft-8保证存放于硬盘或者基于网络传输的数据量很小,提高传输效率与稳定性。
基于目前的现状,内存中的编码固定就是unicode,我们唯一可变的就是硬盘的上对应的字符编码。
此时你可能会觉得,那如果我们以后开发软时统一都用unicode编码,那么不就都统一了吗,关于统一这一点你的思路是没错的,但我们不可会使用unicode编码来编写程序的文件,因为在通篇都是英文的情况下,耗费的空间几乎会多出一倍,这样在软件读入内存或写入磁盘时,都会徒增IO次数,从而降低程序的执行效率。因而我们以后在编写程序的文件时应该统一使用一个更为精准的字符编码utf-8(用1Bytes存英文,3Bytes存中文),再次强调,内存中的编码固定使用unicode。
1、在存入磁盘时,需要将unicode转成一种更为精准的格式,utf-8:全称Unicode Transformation Format,将数据量控制到最精简
2、在读入内存时,需要将utf-8转成unicode
所以我们需要明确:内存中用unicode是为了兼容万国软件,即便是硬盘中有各国编码编写的软件,unicode也有相对应的映射关系,但在现在的开发中,程序员普遍使用utf-8编码了,估计在将来的某一天等所有老的软件都淘汰掉了情况下,就可以变成:内存utf-8<->硬盘utf-8的形式了。
保证文件不乱码核心关键点:使用什么编码存,就用什么编码取
python3中的解释器:uft-8
python2中的解释器:ASCII编码
文件test.py以gbk格式保存,内容为:
x='林'
无论是
python2 test.py
还是
python3 test.py
都会报错(因为python2默认ascii,python3默认utf-8)
除非在文件开头指定#coding:gbk
python2和python3字符编码
python2中的str类型就是python3的bytes类型
文件处理:
基本方式(打开====>读/写====>关闭)
1.open( r'文件的路径',‘mode=“打开方式”,encoding='字符串编码方式’)
例如:a.txt
f=(r'a.txt','mode=r')
2.读写
date=f.read()
printg(f)
del f(这里不能先删除软件中的f)
3关闭文件:
f.close() 回收操作系统的资源
with open (r'a.txt',mode='r') as f:
print('=====>')
print(f.read())
文件的操作模式有三种”r“ "w" "a"
f=open('a.txt',mode='r',encoding='utf-8') #mode='rt'
# print(f.readline(),end='')
# print(f.readline(),end='')
# print(f.readline(),end='')
# f.close()