2013-03-23 109 views
2

我正在努力編寫一個使用某些unicode屬性的Python(2.7版)腳本。當我嘗試使用嵌入式語言環境包時,會出現問題。下面是我有問題的代碼片段:Unicode和區域設置問題

# -*- coding: utf-8 -*- 
import datetime 
import os 
import locale 
locale.setlocale(locale.LC_ALL, 'greek') 
day = datetime.date.today() 
dayFull = day.strftime('%A') 
myString = u"ΚΑΛΗΜΕΡΑ" 
print myString 
print dayFull 

雖然dayFull打印當天的名字就好了。(希臘字母),myString在控制檯作爲問號字符出來。我該如何解決它,有人可以在這裏指出我的錯誤嗎?

P.S.我的系統是Windows 7機器。

+1

你的問題所在與Windows控制檯,它無法正確處理Unicode。請參見[Python,Unicode和Windows控制檯](http://stackoverflow.com/q/5419)。總之,這是控制檯代碼頁,用於呈現Unicode字形的字體和Python 2不能識別65001(微軟採用UTF-8)代碼頁之間的問題。 – 2013-03-23 17:06:44

+0

@Bakuriu你爲什麼從這篇文章中刪除重要信息? – 2013-03-23 18:27:59

+0

在我的電腦上,它完全失敗並出現UnicodeEncodeError錯誤。你使用什麼代碼頁?在命令提示符下鍵入'chcp'來查找。 – 2013-03-23 18:41:39

回答

3

在控制檯中使用正確的希臘代碼頁,以及支持希臘字符的字體,如Consolas。這在Windows 7和Python 2.7.3爲我工作:

C:\>chcp 1253 
Active code page: 1253 

C:\>python temp.py 
ΚΑΛΗΜΕΡΑ 
Σάββατο 

僅供參考,Python的3.3工作正常用(也希)737代碼頁,但是Python 2.7打印:

C:\>temp.py 
???????? 
Σάββατο 
+0

不幸的是,在我的控制檯中,您的解決方案打印出了兩個字符串的完整緩衝區......但是我注意到,如果我在記事本或任何其他窗口程序中複製並粘貼這些緩衝區字符,那麼結果是你所建議的完整的希臘字符...... – kstratis 2013-03-24 18:34:12

+1

這意味着你正在使用的控制檯字體不支持字符。我正在使用'Consolas'。如果我切換到'Raster Fonts',我會看到線條畫字符等。我更新了我的答案。 – 2013-03-24 18:37:43

+0

謝謝。現在你的解決方案可以清理一些東西,並且工作得很好。 – kstratis 2013-03-24 18:45:26