我正在運行Windows 7,並且它的控制檯已配置爲使用Consolas字體,這使我可以輸出Unicode。在控制檯中讀取Unicode的能力已經多次證明,例如Far Manager的程序:西里爾文和德文äö字母可以在同一個控制檯上在同一個字符串中讀取,而無需編碼切換。從cmd.exe運行時在Python stdout中的Unicode輸出
現在關於Python。
我很努力,但在輸出中看不到Unicode。 默認情況下,print(sys.stdout.encoding)
打印cp866
,標準輸出無法輸出除ASCII和西裏爾字母之外的任何字符。
它給了我下面的結果:
print("Ля-ля äöüÄÖÜß")
UnicodeEncodeError: 'charmap' codec can't encode characters in position 6-12: character maps to <undefined>
print("Ля-ля äöüÄÖÜß".encode("utf-8"))
b'\xd0\x9b\xd1\x8f-\xd0\xbb\xd1\x8f \xc3\xa4\xc3\xb6\xc3\xbc\xc3\x84\xc3\x96\xc3\x9c\xc3\x9f'
好吧,我給自己定的批處理文件的PYTHONIOENCODING
環境變量:
SET PYTHONIOENCODING=UTF-8
,並得到:
print(sys.stdout.encoding)
UTF-8
print("Ля-ля äöüÄÖÜß")
╨Ы╤П-╨╗╤П ├д├╢├╝├Д├Ц├Ь├Я
print("Ля-ля äöüÄÖÜß".encode("utf-8"))`
b'\xd0\x9b\xd1\x8f-\xd0\xbb\xd1\x8f \xc3\xa4\xc3\xb6\xc3\xbc\xc3\x84\xc3\x96\xc3\x9c\xc3\x9f'
怎麼辦?
Windows控制檯非常難以打印更高代碼點的unicode值。 –
@Martijn Pieters:我不確定你稱之爲「更高的代碼點」值。我至少需要俄語和德語,並且Windows控制檯證明它可以做到這一點。 – Paul
問題是您的控制檯代碼頁需要切換,但Microsoft提供的唯一代碼頁是cp65001;他們的UTF-8這個充滿bug的想法。例如,請參閱http://alfps.wordpress.com/2011/11/22/unicode-part-1-windows-console-io-approaches/。 –