wxpython中的输出控制台无法打印西里尔文

时间:2014-06-26 13:51:35

标签: python encoding wxpython

即使我在.py文件的顶部有#coding=utf-8并将cyrillica字符串转换为utf-8,然后再将它们传递到控制台,它仍然给了我:

  

文件" C:\ Python27 \ lib \ encodings \ cp1252.py",第15行,解码       return codecs.charmap_decode(input,errors,decoding_table)UnicodeDecodeError:' charmap'编解码器不能将字节0x90解码到位   16:字符映射到

我还能做什么?

这是我的to_utf8功能:

def to_utf8(obj):
    if isinstance(obj, dict):
        return dict([(to_utf8(key), to_utf8(value)) for key, value in obj.iteritems()])
    elif isinstance(obj, list):
        return [to_utf8(element) for element in obj]
    elif isinstance(obj, unicode):
        return obj.encode('utf-8')
    else:
        return obj 

2 个答案:

答案 0 :(得分:3)

你走错了方向:显然 中的str 中的字节是 utf8。然而,python并不关心str中的内容(UTF-8编码的unicode代码点序列只是来自pythons视点的另一个字节序列)。

这仍有待解答:由于我不知道它会尝试解码为cp1252

如果你将utf8用勺子喂给python,它就可以了。同样,如果您明确地为u字面加前缀,Python确实知道字符序列(现在是unicode类型)中的内容。 str != unicode != utf8

# -*- coding: utf-8 -*-
import wx
# works
mystr= "СТАЛИНГРАД".decode('utf8')
# this also works
mystr= u"СТАЛИНГРАД"
# uncomment to make code fail
#mystr= "СТАЛИНГРАД"
app = wx.App(0)
frm = wx.Frame(None, -1, mystr)
frm.Show()
app.MainLoop())

wxPython 3.0只是unicode,接受utf-8和unicode。

答案 1 :(得分:0)

首先,确保你有一个wxPython的unicode版本。最新版本仅在unicode中,但我知道在wxPython 2.8(可能是2.9)中,你可以获得ascii版本。如果你已经知道你有一个unicode构建,那么你可能想快速浏览一下wxPython wiki:

本教程也很有用:

希望其中一个资源可以帮助您找出问题所在。