为什么在Python 2.4中遇到Unicode数据的ASCII编码错误而在2.7中没有?
我有一个程序,在Python 2.7中运行时,可以正确输出Unicode字符到标准输出。但是在Python 2.4中运行时,我遇到了一个错误:UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-4: ordinal not in range(128)
。那么在2.4和2.7版本之间,发生了什么变化,让它现在可以正常工作呢?
1 个回答
7
虽然我在其他地方没有找到相关的说明,但看起来 Python 2.7 会自动把文本转换成终端的编码,而不是像预期那样报错。
Python 2.7:
> echo $LANG
en_US.UTF-8
> python -c 'import sys; print sys.getdefaultencoding()'
ascii
> python -c 'import sys; sys.stdout.write(u"\u03A3")'
Σ
> python -c 'import sys; sys.stdout.write(u"\u03A3".encode("utf8"))'
Σ
Python 2.6(在另一台机器上)
> echo $LANG
en_US.UTF-8
> python -c 'import sys; print sys.getdefaultencoding()'
ascii
> python -c 'import sys; sys.stdout.write(u"\u03A3")'
Traceback (most recent call last):
File "<string>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec cant encode character u'\u03a3' in position 0: ordinal not in range(128)
> python -c 'import sys; sys.stdout.write(u"\u03A3".encode("utf8"))'
Σ
无论如何,在输出之前对数据使用 .encode("utf8") 可以避免这个问题。