#-*- coding: utf-8 -*-
a = '你好'
print a.encode('gbk')
上面这个例子中,a 是 utf8 编码的字符串,当程序要求以 GBK 对 a 进行再编码并打印时,解释器首先将 a 用系统默认编码“解码”转为 unicode(别问我为什么不用文件头声明的编码来解码...),接着再用 GBK 将解码后的 unicode 字符串“编码”后输出。因此,这个例子输出一个异常:
Traceback (most recent call last): File "t.py", line 3, in print a.encode('gbk') UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
其实这个例子跟上一个本身是同一种,只不过第一个例子中是系统尝试用错误的编码来解码不会蹦出异常而已。
python内建函数的非预期行为。这应该是最让人哭的情况了。例如这个例子:
#-*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import base64 a = u'''Hello: 你好,我是 Please remove this message after reading, and I hope this won't bother you for a long time ''' print base64.encodestring(a)