我有一个程序,当在 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 之间发生了什么变化,现在可以使用了?
尽管我在其他地方找不到任何提及,但 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") 应该可以避免该问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)