为什么在Python 2.4中遇到Unicode数据的ASCII编码错误而在2.7中没有?

4 投票
1 回答
2737 浏览
提问于 2025-04-17 00:17

我有一个程序,在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") 可以避免这个问题。

撰写回答