编码问题,如何把语言及生活中的符号编码成计算机中的二进制表示出来。其中涉及到码表(code point)和编码方式。
码表就是字符与序号对应的表。例如Unicode和ASCII码就是码表。
编码方式就是怎么把序号编码成二进制的方式。UTF-8就是编码方式。
从码表转换到字节,就是编码(encoding);从字节转换到码表就是解码(decoding)。编码和解码中的规则就是编码方式规定的。在解码的过程中,必须指定编码方式,如果指定的编码方式和原来的编码方式不同,就会出现各种乱码。
Python编码解码示例(来自《Fluent Python》):
>>> s = 'café'
>>> len(s) # 字符串'café'有4个Unicode字符
4
>>> b = s.encode('utf8') # 用UTF-8编码成字节
>>> b
b'caf\xc3\xa9' #
>>> len(b) # é的对应码表在UTF-8中被编码成两个字节
5
>>> b.decode('utf8') # 再用UTF-8解码成字符串
'café'
Unicode实际上是一整套方案,其中包含一个码表,截止2019年5月,已经有137,994字符,包含了150多个现代、古代的字符以及emoji。Unicode还定义了UTF-8、UTF-16、UTF-32等编码方式。但一般提到Unicode都是指其中的码表。
Reference:
Fluent Python
原文地址:https://www.cnblogs.com/frodo-x/p/11623736.html
时间: 2024-10-19 07:33:07