字符编码与文字处理
1.字符编码储备知识
1.1概念
字符串类型、文本文件的内容都是由字符组成的,'但凡涉及到字符的存取,都需要考虑字符编码的问题'。
1.2字符编码的运行方式
1.在软件运行前它的所有数据都是存储在硬盘当中的。。
2.在任何软件运行都是从硬盘中把数据提取到软盘,然后再由cpu去执行其中的命令。
3.软件运行产生的数据都是在软盘上的如果想永久保存就需要将数据存储在硬盘中。
1.3文本编辑器读取文件内容的流程
阶段1:启动一个文件编辑器(文本编辑器如nodepad++,pycharm,word)。
阶段2:文件编辑器会将文件内容从硬盘读入内存。
阶段3:文本编辑器会将刚刚读入内存中的内容显示到屏幕上。
2.字符编码的介绍
2.1字符编码的前提
它只跟字符类型和文本类型相关,跟视频文件、音频文件、图片文件等无关。
计算机只认识二进制01,所以要让计算机能认识各种各样的字符,就必须让而二进制和字符一一对应器来。
2.2字符编码表
一些字符和数字之间的关系。
3.字符编码的发展史
3.1一家独大
计算机一开始是美国研究的,他们想要计算机识别英文字符。
内部维护的是一张ASCII码表:
# 它的内部是英文字符和数字之间的对应关系
它统一使用的是一个字节保存一个字符:一个字节8位
"""
8位二进制能够表示多少个字符?
2 ** 8 == 256
为什么使用8位来表示?
方便后续添加字符
"""
记忆:
A-Z: 65-96
a-z: 97-
0-9: 48-
3.2天下大乱,群雄纷争
中国人也使用计算机,但ACSSII只认识英文所以就创造了GBK
GBK码表:它的内部记录着英文,中文字符和数字之间的关系。它使用着两个字节以上来保存中文字符。
2 ** 16 == 65535
小日子过的不错的日本人也想让计算机认识自己的日语就有了Shift_JIS表:只有日文字符、英文字符与数字的一一对应关系。
韩国人也是 韩国人也向让计算机能够识别韩文字符,所以也研究了一套字符编码表Euc-kr表:只有韩文字符、英文字符与数字的一一对应关系。
3.3统一天下
为了让全世界都能统一让计算机识别语言,把字符编码表统一了就诞生了unicode(万国码)
统一使用两个字节来保存字符码。如果是英文字符----》1个字节保存一个英文字符------》万国码中使用2个字节保存英文字符----》所以就产生了内存上的浪费。
优化: 从内存中得万国码到硬盘中得utf-8字符
utf-8就是目前大家统一使用的一种编码
1. 它统一使用一个字节来保存英文字符
2. 统一使用三个字节来保存中文字符
"""在utf-8编码表中,一个汉字使用的是三个字节!!!"""
utf系列:
utf-8
utf-16
utf-...
utf8mb4: 它能够存储表情
4.字符编码的实战
4.1如何解决乱码的问题
你在写文件的时候使用的是什么编码,那么你打开的时候就使用对应编码解码就行
4.2Python解释器版本不同代码的编码问题
"""
在python2中使用的编码表不是utf-8,而是ASCII码表
# coding:utf-8
"""它使用的是ASCII码表"""
# 在Python2 中如何定义中文字符
s = u'你好'
print s
4.3如何编码或者解码
编码:把人类能够读懂的字符转化为计算机能够识别的数字(二进制)
解码:把计算机能够读懂的数字转化为人类能够读懂的字符
编码:
res='日本排放和污水,必遭全世界唾弃'
print(res.encode('utf-8'))
#运行
b'\xe6\x97\xa5\xe6\x9c\xac\xe6\x8e\x92\xe6\x94\xbe\xe5\x92\x8c\xe6\xb1\xa1\xe6\xb0\xb4\xef\xbc\x8c\xe5\xbf\x85\xe9\x81\xad\xe5\x85\xa8\xe4\xb8\x96\xe7\x95\x8c\xe5\x94\xbe\xe5\xbc\x83'
解码:
rse1=b'\xe6\x97\xa5\xe6\x9c\xac\xe6\x8e\x92\xe6\x94\xbe\xe5\x92\x8c\xe6\xb1\xa1\xe6\xb0\xb4\xef\xbc\x8c\xe5\xbf\x85\xe9\x81\xad\xe5\x85\xa8\xe4\xb8\x96\xe7\x95\x8c\xe5\x94\xbe\xe5\xbc\x83'
print(rse1.decode('utf-8'))
#运行后
日本排放和污水,必遭全世界唾弃