从Python 2.6 shell:
>>> import sys
>>> print sys.getdefaultencoding()
ascii
>>> print u'\xe9'
é
>>>
我希望在print语句之后有一些乱码或错误,因为“é”字符不是ASCII的一部分,我没有指定编码。我想我不明白ASCII是默认编码的意思。
修改
I moved the edit to the Answers section and accepted it as suggested.
答案 0 :(得分:25)
当将Unicode字符打印到stdout时,使用sys.stdout.encoding
。假定非Unicode字符位于sys.stdout.encoding
中,并且仅发送到终端。在我的系统上(Python 2):
>>> import unicodedata as ud
>>> import sys
>>> sys.stdout.encoding
'cp437'
>>> ud.name(u'\xe9') # U+00E9 Unicode codepoint
'LATIN SMALL LETTER E WITH ACUTE'
>>> ud.name('\xe9'.decode('cp437'))
'GREEK CAPITAL LETTER THETA'
>>> '\xe9'.decode('cp437') # byte E9 decoded using code page 437 is U+0398.
u'\u0398'
>>> ud.name(u'\u0398')
'GREEK CAPITAL LETTER THETA'
>>> print u'\xe9' # Unicode is encoded to CP437 correctly
é
>>> print '\xe9' # Byte is just sent to terminal and assumed to be CP437.
Θ
sys.getdefaultencoding()
仅在Python没有其他选项时使用。
请注意,Python 3.6或更高版本会忽略Windows上的编码,并使用Unicode API将Unicode写入终端。如果字体支持,则不显示UnicodeEncodeError警告并显示正确的字符。即使字体不支持它,字符仍然可以从终端剪切到具有支持字体的应用程序,并且它将是正确的。升级!
答案 1 :(得分:8)
Python REPL尝试从您的环境中获取要使用的编码。如果它找到了理智的东西那么它就是Just Works。它是什么时候它无法弄清楚它发生了什么,它会出错。
>>> print sys.stdout.encoding
UTF-8
答案 2 :(得分:4)
您通过输入显式Unicode字符串指定了编码。比较不使用u
前缀的结果。
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> '\xe9'
'\xe9'
>>> u'\xe9'
u'\xe9'
>>> print u'\xe9'
é
>>> print '\xe9'
>>>
在\xe9
的情况下,Python假定您的默认编码(Ascii),因此打印......空白。
答案 3 :(得分:0)
根据Python default/implicit string encodings and conversions:
print
unicode
时,encode
与<file>.encoding
进行对比。encoding
unicode
,str
会隐式转换为sys.getdefaultencoding()
(因为该编解码器为ascii
,即UnicodeEncodeError
,国家字符会导致encoding
)tty
是从环境推断的。它通常设置了fot print u'\xe9'
个流(来自终端的区域设置),但很可能没有为管道设置
encode()
可能会成功,如果它被重定向则失败。解决方案是在print
之前print
str
具有所需编码的字符串。source activate 'my-conda-python3'
source activate tensorflow
(tensorflow) jupyter notebook
input$map_bounds
时,字节将按原样发送到流。终端显示的字形将取决于其语言环境设置。答案 4 :(得分:-1)
它对我有用:
import sys
stdin, stdout = sys.stdin, sys.stdout
reload(sys)
sys.stdin, sys.stdout = stdin, stdout
sys.setdefaultencoding('utf-8')