一、发展史
1、前提
字符编码只跟文本数据和字符串有关系,它跟视频文件、音频文件等无关
2、计算机只能识别二进制数,详解如下
二进制数即由
0
和
1
组成的数字,例如
010010101010
。计算机是基于电工作的,电的特性即高低电平,
人类从逻辑层面将高电平对应为数字
1
,低电平对应为数字
0
,这直接决定了计算机可以识别的是由
0
和
1
组成的数字
3、发展史
一家独大计算机最开始是有美国人发明的,他们肯定是想让计算机识别英文字符
ASCII码表:它的内部记录了英文字符和数字之间的关系
ASCII码表内置使用一个字节代表一个字符
# 一个字节等于8位
0000001
2 ** 7 == 128
2 ** 8 == 256
在当初的时候,127种情况足够秒杀当时遇到的所有字符
后面使用8位代表一个字节是为了后续增加字符
需要记忆的是:
A
-
Z:
65
-
往后加一
a
-
z:
97
-
往后加一
0
-
9
:
48
-
往后加一
字符串的比较:是按照ASCII码表的十进制数进行比较的
print('hello' > 'world')
中国人要想使用计算机,就自己开发了一套编码表:
GBK码表:国标码,它的内部记录了英文、中文和数字之间的对应关系
你
-
-
-
-
-
>
129
好
-
-
-
-
-
-
>
130
2
*
*
16
=
=
65536
GBK码表使用1个字节保存英文字符,使用2个字节保存中文字符
日本人要想使用计算机,也得发明一套属于自己的编码表
Shift_JIS表
韩国人也要有一套属于自己的编码表
Euc-kr表
一统天下
为了让世界上的所有国家之间能够彼此无障碍的交流,统一使用了编码
unicode(万国码)(在内存中,写文档时,还没保存的时候数据在内存中,依旧能识别中文,是因为内存中有unicode编码)
unicode统一使用两个字节保存字符或者更多字符
由于原来的英文字符是使用一个字节保存的,现在万国码使用了两个字节,所以就把资源浪费了一倍
utf8编码(unicode的优化版本)
utf8中 1个字节保存英文字符,3个字节保存中文字符
最终得出结论:以后在使用字符编码的时候就使用utf8
# 补充:
utf
-
8
、utf
-
16
、utf
-
32.
..、utf8mb4(存表情)
GBK和utf-8编码底层都基于ASCII,所以一个英文字母都是用一个字节表示
二、python中的操作
1、 python解释器代码的差异
在python2中,默认使用的编码是ASCII码
# **-coding:utf-8-**
s
=
u
'你好'
print
s
python3中默认使用的是utf8编码
2、编码和解码
编码:是把其他字符串转为二进制的过程
str
-
-
-
-
-
>
0101
str
-
-
-
-
-
>
unicode
-
-
-
-
-
>
0101001
ASCII
-
-
-
-
>GBK
-
-
-
-
-
-
>
unicode
-
-
-
-
-
>utf8
解码:把二进制转为其他字符串的过程
s
=
'hello你好哈'
编码
res
=
s.encode(
'utf8'
)
# print(res) # b'hello' # 二进制 binary bin()
print
(res)
# b'hello\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x93\x88'
解码
res1
=
res.decode(
'utf8'
)
# gbk、utf8
print
(res1)
# hello你好哈
# 补充
s1
=
b
'hello123'
# 只能是纯英文字符
s2
=
'hello123'
.encode(
'utf8'
)