Python中的字符编码

发布时间 2023-11-10 22:04:29作者: JessicaJJmm

一、发展史

 1、前提

字符编码只跟文本数据和字符串有关系,它跟视频文件、音频文件等无关

2、计算机只能识别二进制数,详解如下

二进制数即由01组成的数字,例如010010101010。计算机是基于电工作的,电的特性即高低电平,
人类从逻辑层面将高电平对应为数字1,低电平对应为数字0,这直接决定了计算机可以识别的是由01组成的数字

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-**
= u'你好'
print s

python3中默认使用的是utf8编码

2、编码和解码
编码:是把其他字符串转为二进制的过程

str----->0101
str----->unicode----->0101001
ASCII---->GBK------>unicode----->utf8

解码:把二进制转为其他字符串的过程

= 'hello你好哈'

编码

res = s.encode('utf8')
# print(res) # b'hello' # 二进制 binary bin()
print(res) # b'hello\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x93\x88'

解码