2012-03-27 85 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