字符编码
引入
字符串类型,文本文件的内容都是由字符串组成的,但凡涉及到字符的存取,都需要考虑字符编码的问题。
字符编码这个知识点的典型特征就是理论多,结论少,但对于开发而言只需要记住结论即可,下面让我们来一点点介绍它。
一:字符编码
什么是字符编码?
由于计算机内部只识别二进制 但是用户在使用计算机的时候却可以看到各式各样的语言字符.
字符编码:内部记录了人类字符与数字对应关系的数据。
二:字符编码发展史
1.一家独大
计算机最初是由美国人发明的 美国人为了能够让计算机识别英文字符
ASCII码:里面记录了英文字符与数字的对应关系
用一个字节来是对应关系
"""
所有的英文字符和符号加起来其实不超过127
之所以使用八位是为了后续发现新的语言
"""
必须记住的对应关系有以下两组
A-Z:65-90
a-z:97-122
2.群雄割据
中国人
为了能够让计算机识别中文 我们需要发明另外一套编码表
GBK码:记录了英文中文与数字的对应关系
对于英文还是使用一个字节
对应中文使用两个字节甚至更多字节
"""两个字节其实也不够表示出所有的中文
遇到生僻字可能需要更多位来表示
"""
日本人
为了能够让计算机识别日文 也需要发明一套编码表
shift_JIS码:记录了日文英文与数字的对应关系
韩国人
为了能够让计算机识别韩文 也需要发明一套编码表
Euc_kr码:记录了韩文英文与数字的对应关系
3.天下一统
为了能够实现不同国家之间的文本数据能够彼此无障碍交流需要对编码统一
unicode(万国码)
统一使用两个及以上字符记录字符与数字的对应关系
utf8(万国码的优化版本)
将英文还是用一个字节存储
将中文使用三个字节或更多字节存储
'''现在默认使用的编码是utf8'''
三:字符编码实操
1.如何解决文件乱码的情况
文件当初以是什么编码的 打开的时候就以什么编码解
2.python解释器版本不同带来的编码差异
python2.x内部使用的编码默认是ASCII
-
文件头
oding:utf8 -
在python中定义字符串前面要加一个小u
s = u'你'
python3.x内部使用utf8 -
自定义文件模板内容 :自定义文件创建的、
file
settings
Editor
file and code templates
python script
3.编码与解码
编码:
将人类能够读懂的字符按照指定的编码转换成数字、
解码:
将数字按照指定的编码转换成人类能够读懂的字符
s = '每天不要想太多 学就完事了 干就完了 奥里给'
- 编码
res = s.encode('(utf8)')
print(res,type(res)) # bytes 在python中直接将该类型看成二进制数据即可 - 解码
res1 = res.decode('utf8') # 两个一样都可以
print(res1)
了解
s1 = b'jasonNB123' s1.encode() 不能有其他国家语言
![image](https://img2020.cnblogs.com/blog/2608805/202111/2608805-20211110230310320-798383383.webp)
### 四:文件操作
```pyt
1.什么是文件?
文件其实是操作系统暴露给用户操作硬盘的快捷方式(接口)
2.代码如何操作文件?
关键字open()
三步走:
1.利用关键字open打开文件
2.利用其他方式操作文件
3.关闭文件
open(打开)
文件路径
相对路径与绝对路径
路径中出现了字母与斜杠的组合产生了特殊含义如何取消
在路径字符串前面加一个r
* r'D:\py20\day08\a.txt'
* 创建普通文本文件-New->File 自定义文件后缀名
* open('a.txt') 相对路径
* open(r'D:\py20\day08\a.txt') 绝对路径
第二个参数
* res = open('a.txt', 'r', encoding='utf8')
* print(res.read()) read(读文件内容)
* res.close() 关闭文件释放资源
*
open(文件管理,读写模式,字符编码
文件路径与可读模式是必须的
字符编码是可选的(有些模式需要编码)
)
* with上下文管理(能够自动帮你close())
with open(r'a.txt','r',encoding='utf8')as f1: # f1=open() f1.close()
print(f1.read())
以后代码操作文件 推荐使用with语法
### 六:文件读写模式
补全语法结构 没有实际含义 补全代码结构
pass
...
三个模式:
r 只读模式(只能看不能改)
以前都是能打开能写能看,但在程序里面永远都是读写分离,做数据库也是读写拆开来的
,一部分负责读,一部分负责取
* 路径不存在:直接报错
with open(r'b.txt','r',encoding='utf8') as f:
pass
路径存在:
with open(r'a.txt, 'r', encoding='utf8') as f:
print(f.read()) 读取文件内所有的内容
f.write('123') 写文件内容
w 只写模式(只能写不能看)
路径不存在:路径不存在自动创建新文件
with open(r'b.txt', 'w', encoding='utf8') as f:
pass
路径存在:1.会先清空文件内容 2.再执行写入操作
with open(r'a.txt', 'w', encoding='utf8') as f:
f.read()
f.write('hello world!\n')
f.write('hello world!\n')
f.write('hello world!\n')
a 只追加模式(尾部追加内容)
with不运行自动关闭
opem打开
read(读文件内容)
close()关闭文件释放资源
encoding='utf8 字符编码
![image](https://img2020.cnblogs.com/blog/2608805/202111/2608805-20211110230503032-1554829139.webp)