即使我在.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
答案 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:
本教程也很有用:
希望其中一个资源可以帮助您找出问题所在。