2017-08-13 87 views
3

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代碼錯誤的原因是什麼?

回答

2

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的慶典在這種情況下(不返回錯誤,無論它是否打印字符)? –