2012-03-27 132 views
0

我已經決定與CP866去避免的unicode 65001噩夢顯示西里爾符號(BUG,補丁,等等......請),所以在我的程序每個輸出字符串編碼爲CP866無法在詛咒

# coding=utf-8 
print 'Кабздец'.decode('utf-8').encode('cp866') 

這一行輸出正確的字符串到Windows控制檯,當然如果我在運行我的腳本之前設置chcp 866。

但是,我不能使詛咒顯示在相同的編碼。

stdscr.addstr("Кабздец".decode('utf-8').encode('cp866')) 

這會輸出垃圾。 Curses doc說我必須設置區域設置。所以我試圖使用

locale.setlocale(locale.LC_ALL, '') 

這有點改變,仍然是垃圾,我猜是因爲我的區域設置是CP1251。 locale.getpreferredencoding()返回cp1251

問題是如何使curses正確編碼字符串。

我也試過

locale.setlocale(locale.LC_ALL, 'rus') 

將只呈現不同的符號,不正確的。

回答

0

您是否嘗試過在addstr調用中使用altcharacterset屬性呢?

+0

nm,那看起來不是這個......這是一個棘手的問題。您是否嘗試過使用文檔中示例中的方法,並在設置區域設置後僅使用默認編碼? – 2012-03-27 14:14:24

+0

我通過在程序中將locale設置爲'rus'找到了一些解決方案,在兩個控制檯中使用chcp和程序將代碼頁從866更改爲1251。我想這是我能做到的最好的。 – Pablo 2012-03-27 14:23:03