字符编码:
字符编码: 二进制 和 你所能认识的字符 之间的相互转换的一个过程
早期的ascii码
中国人的gbk码,4个字节
unicode: 认识万国语言,万国编码
unicode:把 8位的英文变成了16位的英文, 多占用了内存空间,因此产生了utf8码可以节省储存空间
出现乱码的情况:
编码格式不统一
文本编辑器支持的是utf8 ,你输入的是gbk --> 文件的存储
文件存储用了utf8 ,但是下次打开用了gbk --> 文件的读取
通俗举例:
中文的文本编辑器只认识中文,然后你输入了日文 --> 乱码 # encode 编码
文本编辑器存储了中文(文件),但是你用日本的编辑器打开这个文件 --> 乱码 # decode 解码
如何解决乱码:
什么格式存储, 就什么格式读取 就不会乱码(牢记这句话)
Python2和3的区别:
python解释器运行代码的流程
1. 启动python解释器(相当于文本编辑器)
2. 打开文件,显示这个字符并检查语法(涉及字符编码, a=1只是一个很普通的字符)
3. 解释字符 (涉及字符编码,再去内存空间 生成一个a=1的变量)
第二步python2和python3的区别
python2默认是ascii读取字符, python3默认是utf8读取字符,coding:gbk`会告诉python3解释器用gbk编码读取字符
第三部python2和python3的区别
Python2(了解)
使用unicode 或者 指定的coding编码(str类型)
```python
# coding:gbk
a = '中文' # 用gbk编码存储了这堆0和1
a = u'中文' # 用unicode编码存储了这堆0和1
print(a)
```
终端是一个文本编辑器,会有默认编码.
假设终端的默认编码是gbk , 认识 gbk编码的变量
假设终端的默认编码是utf8, 不认识 gbk编码的变量
python3(了解)
使用unicode
```python
# coding:gbk
a = '中文' # 用unicode编码存储了这堆0和1
print(a) # 010101010
```
在终端中看到的其实是unicode,但是终端帮你把这个unicode的0和1做一个转换,
从unicode转换成了终端能够识别的编码格式,然后变成中文
假设终端的默认编码是gbk , 认识 unicode编码的变量
假设终端的默认编码是utf8,认识 unicode编码的变量
文件的三种打开模式
r模式:
f = open('test.py','r',encoding='utf8') # 只读 # 文件内容拿出来,读一行少一行
print(f.read()) # 读取文件所有内容,
print(f.readline()) # 读取一行
print(f.readlines()) #读取所有内容,但是是以列表的形式展示
print(f.readable()) # 判断是否可读 # True
f.close()
以后使用这个方式循环文件for i in f:
print(i)
w模式:
f = open('test.py','w',encoding='utf8') # 只写 # 清空后再写,自动创建文件
lt = ['sdklfj','sdkfjksldf']
res = '
'.join(lt)
f.write(res)
print(f.readable())
print(f.writable()) #判断是否可写
f.writelines(['sdklfj','sdkfjksldf']) #只能以列表的形式
f.close()
a模式:
f = open('test.py','a',encoding='utf8') # 追加 # 文件末追加
f.write('nick handsome')
f.close()
二进制模式:
文本模式t(默认)
f = open('test.py','rt')
data = f.read()
print(data)
进制模式b(打开图片视频等都需要用到)
f = open('python2和3的字符编码的区别.png', 'rb')
f = open('python2和3的字符编码的区别.png', 'wb')
f = open('python2和3的字符编码的区别.png', 'ab')
data = f.read()
print(data)
fw = open('test.png','wb') # encoding是为了让二进制代码变成文本所需要的,所以b模式不需要encoding
fw.write(img)
with管理文件操作
with open('test1.png','wb') as fw: # 自动关闭文件
fw.write(img)
with open('test.py', 'rt', encoding='utf8') as fr2,
open('test.txt', 'rt', encoding='utf8') as fr1,
open('test.png', 'rb') as fr3:
data1 = fr1.read()
print('data1', data1)
data2 = fr2.read()
print('data2', data2)
data3 = fr3.read()
print('data3', data3)
反斜杠用来表示所属同一行
print('skdfjlllllllsfsdfsdfskdfjlllllllsfsdfsdfskdfjlllllllsfsdfsdfskdfjlllllllsfsdfsdfskdfjlllllllsfsdfsdfskdfjll
英')