"""
1 什么是字符编码
人类的字符转换成数字的过程称之为字符编码
?
该过程需要参照一张表,该表称之为字符编码表
?
编码
人类的字符-----------转换成--------------》数字
?
解码
人类的字符《-----------转换成--------------数字
?
?
2 字符编码表
a--00
b--01
c--10
d--11
?
ASCII: 用8bit对应一个英文字符
可以识别英文字符
?
gbk:用16bit对应一个字符
可以识别中文字符、英文字符
?
shift-JIS:
可以识别日文字符、英文字符
?
Euc-KR
可以识别韩文字符、英文字符
?
万国字符编码表:unicode,用16bit位对应一个字符
兼顾两大历史使命
1、可以识别万国字符
2、兼容老的字符编码格式
?
内存中用的字符编码格式默认都是unicode,而且不能改变
我们可以改的是存入硬盘的字符编码格式
?
万国字符------------》unicode格式的二进制(内存)---------》utf-8格式的二进制(硬盘)
中文、英文字符------------》unicode格式的二进制(内存)---------》GBK格式的二进制(硬盘)
日文、英文字符------------》unicode格式的二进制(内存)---------》shift-JIS格式的二进制(硬盘)
?
utf-8全称Unicode Transformation Format,
?
若想保证不乱码
1、保证存不乱
存入硬盘的编码格式要能识别输入的字符
2、保证读不乱
存取硬盘用得都是同一种字符编码格式
3、往硬盘存的新文件以后都存成utf-8格式
?
python3 D:\全栈18期\day09\代码\test.py
?
python3解释器默认读文件的编码格式是utf-8
python3解释器默认读文件的编码格式是ASCII
?
推荐用python3解释器,因为python3解释器存字符串类型的值会存储unicode格式
如果用到python2解释器,记得在字符串类型前加前缀u
?
"""
?
编码 编码
字符---------》unicode格式----------》utf-8格式
x = "上"
?
res = x.encode(‘utf-8‘)
print(res,type(res))
?
解码 解码
字符<---------unicode格式<----------utf-8格式
print(res.decode(‘utf-8‘))
?
f = open(‘db.txt‘,mode=‘rt‘,encoding=‘utf-8‘)
print(f.read())
print(‘=‘*50)
print(f.read())
f.close()
?
?
with上下文管理
?
with open(‘db.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f:
print(f.read())
print(‘=‘*50)
print(f.read())
?
?
with open(‘db.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f,\
open(‘b.txt‘,mode=‘rt‘) as f1:
print(f.read())
print(‘=‘*50)
print(f.read())
文件的打开模式分为两大类
一 控制文件读写内容
t(默认):无论读写都是以字符串为单位的,必须指定encoding参数
b:无论读写都是以bytes为单位的
?
?
二 控制文件读写操作
r(默认):只读模式
w:只写
a:只写(追加写)
?
rt wt at
rb wb ab
?
?
r:如果不存在则报错,如果文件存在则指针置于文件开头
with open(‘a.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f:
print(f.read())
print(‘=‘*50)
print(f.read())
for line in f:
print(line)
?
f.write("你好") # 报错
?
?
?
w:如果不存在则创建空文档,如果文件存在则清空,指针置于文件开头
with open(‘a.txt‘,mode=‘wt‘,encoding=‘utf-8‘) as f:
f.write("你好啊1\n")
f.write("你好啊2\n")
f.write("你好啊3\n")
print(f.read()) # 报错
?
?
a:如果不存在则创建空文档,如果文件存在则清空,指针置于文件末尾
with open(‘c.txt‘,mode=‘at‘,encoding=‘utf-8‘) as f:
f.write("你好啊1\n")
f.write("你好啊2\n")
f.write("你好啊3\n")
?
print(f.read()) # 报错
原文:https://www.cnblogs.com/daishenmin/p/15340013.html