字符问题

编码与解码

“字符串”是个相当简单的概念:一个字符串是一个字符序列。问题出在“字符”的定义上。在2015年,“字符”的最佳定义是Unicode字符。因为,从Python3的str对象中获取的元素是Unicode字符,这相当于从Python2的unicode对象中获取的元素,而不是Python2的str对象中获取的原始字节序列。
Unicode标准把字符的标识和具体的字节表述进行了如下的明确区分:

  • 字符的标识,即码位,是0-1114111的数字(十进制),在Unicode标准中以4-6个十六进制数字表示,而且加前缀“U+”。例如,字母A的码位是U+0041,欧元符号的码位是U+20AC。在Unicode 6.3中,约10%的有效码位有对应的字符。
  • 字符的具体表述取决于所用的编码,编码是在码位和字节序列之间转换时使用的算法。在UTF-8编码中,A(U+0041)的码位编码成单个字节\x41,而在UTF-16LE编码中编码成两个字节\x41\x00。

把码位转换成字节序列的过程是编码l;把字节序列转换成码位的过程是解码。

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity='all'
s='café'
len(s) # 'café'字符有4个Unicode字符
b=s.encode('utf8') # 使用UTF-8将str对象编码成bytes对象
len(b) # bytes字面量以b开头
b.decode('utf8') # 使用UTF-8把bytes对象解码成str对象
4






5






'café'
posted @ 2021-10-10 10:00  里列昂遗失的记事本  阅读(33)  评论(0编辑  收藏  举报