一、发展史
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好------>1302 ** 16 == 65536GBK码表使用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 spython3中默认使用的是utf8编码
2、编码和解码
编码:是把其他字符串转为二进制的过程
str----->0101str----->unicode----->0101001ASCII---->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、utf8print(res1) # hello你好哈# 补充s1 =b'hello123' # 只能是纯英文字符s2='hello123'.encode('utf8')

浙公网安备 33010602011771号