2011-05-30 42 views
1

我碰巧無法在Windows上的Python終端中設置字符編碼。據官方指南,這是小菜一碟:在Windows上設置Python終端編碼

# -*- coding: utf-8 -*- 

好了,現在測試:

print 'Русский' 

主要生產一塊變爲亂碼的。什麼做錯了?

P.S. IDE是Visual Studio 2010中,如果它的事項

+0

你可以嘗試;打印u'Русский'? – utdemir 2011-05-30 18:34:25

+0

u'Русский'生成SyntaxError:無法解碼位置中的字節0xd0 ... – Arnthor 2011-05-30 18:59:51

+1

好運說服Python在windows上輸出任何東西,但ascii到交互式控制檯 – 2011-05-30 19:08:33

回答

2

更新:有關更好的解釋和更好的解決方案,請參閱J.F. Sebastian's answer

# -*- coding: utf-8 -*-設置源文件的編碼,而不是輸出編碼。

您必須在使用與您的終端使用完全相同的編碼打印之前對字符串進行編碼。在你的情況下,我猜你的代碼頁是西里爾(cp866)。因此,

print 'Русский'.encode("cp866") 
+0

代碼失敗,並且*「UnicodeDecodeError:'ascii'編解碼器無法解碼字節」* - 您忘記了u'''前綴來創建Unicode字符串。您不應該在腳本中硬編碼環境的字符編碼。環境可能會改變。 [打印Unicode代替](http://stackoverflow.com/a/29352343/4279) – jfs 2015-03-30 17:23:03

+0

嗯。我剛剛測試過,結果證明你是對的。自從我寫這個答案已經有一段時間了,所以也許有些東西改變了?在任何情況下,我都會通過將其重定向到您的更新來解決問題。 – 2015-12-20 11:12:10

3

你應該使用unicode:

print u'Русский' 

或(系統默認的Unicode)切換到python3。

+1

'from __future__ import unicode_literals'也啓用Python 2上的Unicode文字。如果console chcp無法表示給定的Unicode字符,或者輸出被重定向(Python 2在這種情況下使用'ascii'),則打印Unicode默認不起作用。請參閱[可能的解決方案](http://stackoverflow.com/a/29352343/4279)。 – jfs 2015-12-20 11:44:57

0

萬一別人搜索 最簡單的是設置窗口終端代碼頁時,得到這個頁面

CHCP 65001 

或電源外殼採用

powershell.exe -NoExit /c "chcp.com 65001" 

從啓動Is there a Windows command shell that will display Unicode characters?

+0

一般來說,['65001!= utf-8'](http://stackoverflow.com/questions/5419/python-unicode-and-the-windows-console#comment10878950_2013263)。雖然它可能在某些情況下工作。 – jfs 2015-03-30 17:24:40

+0

一般來說,[在PowerShell中更改'chcp'編碼既不必要也不足夠。](http://stackoverflow.com/a/33959798/4279) – jfs 2015-12-20 11:35:10

2

它生產mojibake becau se ''是Python 2中的字節串文字(除非使用了from __future__ import unicode_literals)。您在打印使用一些其他字符編碼(編碼是不同的,如果你看到變爲亂碼),UTF-8字節(源代碼編碼)到Windows控制檯:

>>> print(u'Русский'.encode('utf-8').decode('cp866')) 
╨а╤Г╤Б╤Б╨║╨╕╨╣ 

解決方案是打印的Unicode而不是as @JBernardo suggested

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
print(u'Русский') 

它的工作原理如果控制檯編碼支持西裏爾字母例如,如果是cp866

如果你想將輸出重定向到一個文件;你可以使用PYTHONIOENCODING環境變量設置爲I/O使用Python中字符編碼:

Z:\> set PYTHONIOENCODING=utf-8 
Z:\> python your_script.py > output.utf-8.txt 

如果你想print Unicode characters that can't be represented using the console encodingOEM code page),那麼你可以安裝win-unicode-console Python package

Z:\> py -m pip install win_unicode_console 
Z:\> py -m run your_script.py