基石为勤能补拙的迷宫之旅——第七天(Python字符编码和三种字符串)

一、字符编码

1.计算机三大核心硬件

    CPU:将数据渲染给用户
    内存:临时存取数据,断电消失
    硬盘:永久保存数据,断电还有

2.什么是字符编码?

    人类能识别的是字符的高级标识符,电脑只能识别0,1,要完成人与机器之间的信息交流一定需要一个媒介,进行两种标识符的转化(两种标识符的duiying关系)

    对应关系形成的结构称之为:编码表

编码表的发展史

1.ascii(ASCII):字母,数字,英文符号与计算机01标识符的对应关系
思考:如何将128个字符用01完全标识
二进制:1111 1111 => 255 => 1bytes(1字节) => 8个二进制位

2.中国:研究汉字与计算机01标识符的对应关系:gb2312 => GBK(常用)=> GB18030
日本:Shift_JIS
韩国:Euc_kr

乱码:存数据和读数据采用的编码表不一致

    软件打开文件读取数据的流程:

  1. 打开软件
  2. 往计算机发送一个打开文件的指令,来打开文件
  3. 读取数据渲染给用户

    python解释器打开py文件

  1. 打开软件(python解释器)
  2. 往计算机发送一个打开文件的指令,来打开文件
  3. 逐行解释打开的文件内容(存取编码不一致,无法正常解释,崩溃),将执行结果展示给用户

    python 解释失败的原因:
    py2默认AscII来解释文件内容,py3默认按UTF-8来解释文件内容
    文件头:# encoding:GBK
    功能:告诉py解释器按照什么编码解释文件内容

制造一个可以完成万国字符与计算机01标识符的对应关系的编码表

编码表:unicode表
    py2:ASCII,没有按万国编码,原因py2诞生先于万国编码
    py3:utf-8,采用万国编码来解释文本内容
思考:unicode与utf-8什么关系
    unicode:用2个字节存储汉字,用2个字节存储英文字母,占有空间较多,读取效率极高
    utf-8:用3-6个字节存储汉字,用1个字节存储英文字母,占有空间较少(所占字节数,字符),读取效率低
    总结:内存都是按unicode存储数据,硬盘和CPU按utf-8来存取数据。unicode和utf-8采用一张unicode编码表,utf-8是unicode的一种体现方式,变长存取数据。
    变长存取优势:大量数据都是以英文存在,所以utf-8空间更小,传输速度更快。

二、三种字符串

1.三种字符串例子

(1)unicode字符串,默认字符串
s1 = u’abc你好\n不好’
(2)字节字符串
s2 = b’abc123\xb7\xb7’
(3)原义字符串:不对字符串内部做任何操作(eg:\n的转化)
s3 = r’abc你好\n不好’

2.编码与解码

s = '123呵呵'
b = bytes(s, encoding='utf-8')
print(b)

b = b'123\xe5\x91\xb5\xe5\x91\xb5'
n_s = str(b, encoding='utf-8')
print(n_s)

或者

#将u字符串编码成b字符串 原始的到二进制
u''.encode()
print(u'你好'.encode('utf-8'))

#将b字符串解码成u字符串 二进制到原始的
b''.decode()

猜你喜欢

转载自blog.csdn.net/weixin_43860025/article/details/88830881
今日推荐