Python 的编码问题

使用 Python 最烦的就是处理编码问题,有几点体会:

0、所有数据一律编码为 UTF-8,这样较为合适

1、 Windows 默认的编码不是 UTF-8,使用 open() 函数读写文件的时候如果不指定编码就容易出问题。 建议使用 open(FILENAME, ‘r’, encoding=’utf-8′) 这种形式

2、Python 2 默认的编码不是 UTF-8,使用前先指定编码:

import sys

reload(sys)

sys.setdefaultencoding(‘utf-8’)

即便如此,如果输入不是 utf-8 编码的数据,在经过字符串相关函数处理后,返回的结果仍可能是 ANSI 格式,特别是和字符串常量混在一起运算的时候。这是 Python 2 最大的问题之一。

 

3、 Python 3 默认的编码是 UTF-8,建议使用 Python 3

4、文本数据在使用 encode 函数编码之后,输出到文件或者数据库时要用 decode 函数解码,否则很可能会发现最后输出的数据是二进制形式的,需要再次读取后用 decode 函数解码。

5、unicode 没有所谓的“标点符号”字符集,只能在沿用 string.punctuation 的基础上自己加入想要的字符。 或者使用正则表达式选择文本中想保留的字符

6、print 函数在控制台输出的编码格式是由控制台的编码决定的。 比如 Windows 中文版使用的是 ANSI 编码,因此如果 print 函数要输出一个 UTF-8 编码的数据,很可能会遇到错误 (比如\xe6 这样的字符),因此输出的时候需要改为形如  print s.encode(‘utf-8′,’ignore’)。(print 函数遇到二进制编码的文本数据时会自动解码)