使用默认编码设置为ASCII的打印时没有UnicodeError

Vai*_*pai 5 python unicode

阅读后: 深入Python:Unicode讨论

我很好奇尝试打印我的名字indic script.我正在使用v2.7.2-

>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> name = u'\u0935\u0948\u092D\u0935'
>>> print name
????
Run Code Online (Sandbox Code Playgroud)

我期待print name给我UnicodeError,因为defaultencoding被设置为ASCII使自动强迫ASCIIUnicode不应该工作.

我错过了什么?

unu*_*tbu 9

print使用sys.stdout.encoding,而不是sys.getdefaultencoding():

当Python找到附加到终端的输出时,它会将sys.stdout.encoding属性设置为终端的编码.print语句的处理程序将自动将unicode参数编码为str输出.

>>> import sys
>>> print(sys.stdout.encoding)
utf-8
>>> print(sys.getdefaultencoding())
ascii
>>> name = u'\u0935\u0948\u092D\u0935'
>>> print name
????
Run Code Online (Sandbox Code Playgroud)