Python中通过 '混帐击' 打印Unicode字符串获得 'UnicodeEncodeError'

问题描述:

test.py我有Python中通过 '混帐击' 打印Unicode字符串获得 'UnicodeEncodeError'

print('Привет мир') 

CMD工作正常

> python test.py 
?????? ??? 

混帐击有错误

$ python test.py 
Traceback (most recent call last): 
    File "test.py", line 2, in <module> 
    print('\u041f\u0440\u0438\u0432\u0435\u0442 \u043c\u0438\u0440') 
    File "C:\Users\raksa\AppData\Local\Programs\Python\Python36\lib\encodings\cp1252.py", line 19, in encode 
    return codecs.charmap_encode(input,self.errors,encoding_table)[0] 
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-5: character maps to <undefined> 

enter image description here

有谁知道背后得到通过时的Git 猛砸执行Python代码错误的原因是什么?

Python 3.6直接使用Windows API将Unicode编写到控制台,所以打印非ASCII字符要好得多。但Git Bash不是标准的Windows控制台,因此它回退到之前的行为,在终端编码中编码Unicode字符串(在您的情况下为cp1252)。 cp1252不支持西里尔文,所以失败了。这个是正常的”。您将在Python 3.5及更旧版本中看到相同的行为。

在Windows控制台中,Python 3.6应该打印实际的西里尔字符,所以令人惊讶的是您的“?????? ???”。这不是“正常”,但也许你没有选择支持西里尔语的字体。我有几个Python版本的安装:

C:\>py -3.6 --version 
Python 3.6.2 

C:\>py -3.6 test.py 
Привет мир 

C:\>py -3.3 --version 
Python 3.3.5 

C:\>py -3.3 test.py 
Traceback (most recent call last): 
    File "test.py", line 1, in <module> 
    print('\u041f\u0440\u0438\u0432\u0435\u0442 \u043c\u0438\u0440 \u4f60\u597d') 
    File "C:\Python33\lib\encodings\cp437.py", line 19, in encode 
    return codecs.charmap_encode(input,self.errors,encoding_map)[0] 
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-5: character maps to <undefined> 
+0

谢谢您的回答,我得到了更多的想法 –

+0

那么,有没有办法让git的庆典在这种情况下(不返回错误,无论它是否打印字符)? –