流畅的Python(5) —— 文本和字节序列
Python中对字符串的管理有两种方式一种是:字符序列另一种是Unicode,在中文的自然语言处理中,会使用到文本数据,所以需要仔细地研究字符串与文本关系,这也是Python中的一个坑点。
下图为Unicode与字节码的关系:
1.Unicode(码位) 与bytes(字节序列)
Unicode就是我们常说的“字符”,也叫码位,Python中string类型是Unicode编码,可以把他认为是人类看懂的字符,对于Python而言是统一的。
字节码:是由byte字节类型组成,用来表示字符的串。在C语言中,变量类型为char,占一个字节,根据不同的编码方法同一个字符会有不同个数的字节来表示。
2. 编解码问题
str.encode()和b.decode()是连接Unicode和bytes之间的两个重要方法。
编码(encode):将Unicode按照编码方法(如:UTF-8, UTF-16)编译成字节序列
解码(decode):将字节序列按照编码方法编译成Unicode编码
值得注意的是: 编解码的方法需要事先指定,否则回造成UnicodeError等常见错误
3. 常见的字符串错误与最佳实践
常见错误
错误名称 | 原因 |
---|---|
UnicodeEncodeError | 把文本转换成字节序列时,如果目标编码中没有定义某个字符,就会报错 |
UnicodeDecodeError | 把二进制序列转换成文本时,如果假设是这两个编码中的一个,遇到无法转换的字节序列时会抛出 UnicodeDecodeError |
目前的最佳实践是,IO过程需要进行编解码操作,而数据处理阶段仅需要完全对Unicode进行操作。