为什么我在Python 2.4中使用Unicode数据但在2.7中没有获得ASCII编码错误?

Kei*_*son 4 python unicode encoding exception

我有一个程序,当在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之间有什么变化?

Gri*_*ave 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"))'
?
Run Code Online (Sandbox Code Playgroud)

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"))'
?
Run Code Online (Sandbox Code Playgroud)

在任何情况下,输出前的数据上的.encode("utf8")都应该避免这个问题.

  • Why.encode("utf-8")not.encode("utf-8")you.encode("utf-8")just.encode("utf-8")set.encode("utf-8" ").encode("utf-8")stream.encode("utf-8")encoding.encode("utf-8")for.encode("utf-8")stdout.encode("utf-8" ")to.encode("utf-8")be.encode("utf-8")UTF-8.encode("utf-8")all.encode("utf-8")the.encode("utf" -8")时间?.encode("utf-8")That.encode("utf-8")saved.encode("utf-8")the.encode("utf-8")ridiculous.encode(" utf-8")和.encode("utf-8")massive.encode("utf-8")annoyance.encode("utf-8")of.encode("utf-8")this.encode(" utf-8")特殊.encode("utf-8")sort..encode("utf-8") (7认同)
  • 不是他的问题的答案,但如果有人感兴趣:`import sys,codecs; sys.stdout = codecs.getwriter('utf8')(sys.stdout)` (2认同)