我决定使用cp866来避免unicode 65001噩梦(bug,补丁等等),所以我程序中的每个输出字符串都编码成cp866
# coding=utf-8
print 'Кабздец'.decode('utf-8').encode('cp866')
此行将正确的字符串输出到Windows控制台,当然如果我在运行脚本之前设置了chcp 866。
但是,我无法使curses以相同的编码显示。
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 :(得分:0)
您是否尝试过使用addstr调用上的altcharacterset属性?