字符编码
一:字符编码
1、字符编码
-
什么是字符编码:将人能识别的字符转换为计算机能识别的01二进制的过程就是字符编码,转换的规则就是字符编码表
- 常用的编码表:ASCII、GBK、Unicode、UTF-8
了解:编码表的发展史
1. ascii(ASCII):字母、数字、英文符号与计算机01标识符的对应关系
思考:如何将128个字符用01完全标签
二进制:11111111 => 255 => 1bytes(1字节) => 8个二进制位
2.中国:研究汉字与计算机01标识符的对应关系:gb2312 => GBK(***) => GB18030
日本:Shift_JIS
韩国:Euc-kr
3. 制造一个可以完成万国字符与计算机01标识符的对应关系的编码表
编码表:unicode表
py2:ascii,没有按万国编码,原因py2要诞生先有万国编码
py3: utf-8, 采用万国编码来解释文本内容
# 思考:unicode与utf-8什么关系
unicode:用2个字节来存储汉字,用2个字节来存储英文字母,占有空间较多,读取效率极高
utf-8:用3-6个字节来存储汉字,用1个字节来存储英文字母,占有空间较少,读取效率低
总结:内存都是按unicode存储数据,硬盘和cpu采用utf-8来存取数据
#“abc你好”
unicode与utf-8采用的是一张unicode编码表,utf-8是unicode编码表体现方式,变长存储数据。变长优点:(大量数据都是以英文存在,所以utf-8空间更小)传输速度更快
- 编码操作:编码encode()、解码decode()
s = '123呵呵'
n_b = bytes(s, encoding='utf-8')
print(n_b)
b = b'123\xe5\x91\xb5\xe5\x91\xb5'
n_s = str(b, encoding='GBK')
print(n_s)
在清楚原格式是字符串还是二进制时:
# 将u字符串编码成b字符串
print(u'你好'.encode('utf-8'))
# 将b字符串解码成u字符串
print(b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode('utf-8'))
2、字节与字符
-
三种字符串:
u'' :文本字符串,
r'' :原义字符串,不对字符串内存做任何操作(eg:\n的转化):s3 = r'abc你好\n不好'
b'' :二进制字符串,是用来数据传输的,是字符的二进制体现(如视频资源可以转化为二进制字符串,不翻转为视频资源,则就是普通字符串),它以字节为最小存储单位存放数据。注意:不是所有的数据编码为二进制字符串都是采用UTF-8编码表的,只有文本内容是,像视频、音频、图片等都有特定的编码方式(他们在编码之后,如果没有解码成本来的格式,就只是普通的二进制字符串)
-
# 字符与ASCII之间转化
res = ord('A')
print(res)
res = chr(65)
print(res)
# ascii:DBCS双字节存储可以存放中文等一些文字与字符,可以完成字符与整数(ascii表中整数)的转化
print(ord('⑩'), chr(9323))