如何在wxpython中传递字符′?
当我试图通过 wx.python 的 Textctrl 插入这个文本 2′BR
到 MySql 时,出现了这样的错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128).
问题出在字符 ′
上,我尝试过用 encode('utf8')
,但还是不行。当我手动插入到 MySql 后,再查询时,它显示为 2?BR
。下面是插入的代码。谢谢。
cur.execute("INSERT INTO TKtable (title) VALUES (%s)", (str(self.Text.GetValue())))
1 个回答
1
我猜你是在Python 2下使用wxPython的unicode版本(而不是Python 3)。
问题出现在你调用self.Text.GetValue()
的结果时,使用了str
这个构造函数。
wxPython可以接受各种字符,并返回unicode字符串。在你的例子中,Textctrl.GetValue()
返回的是unicode字符串u"2′BR"
。
str()
试图把这个unicode字符串转换成普通字符串,使用的是默认的编码方式,也就是ascii。ascii只能表示128个字符,而字符"′"在ascii中是没有的。这就是你遇到这个错误的原因。
你的MySQL数据库使用的是什么编码呢?如果你想使用像"′"这样的特殊字符,你应该把数据库的编码设置为utf-8。
这样你就可以做到:
cur.execute("INSERT INTO TKtable (title) VALUES (%s)", (self.Text.GetValue(),))
如果你的数据库编码中没有某个字符,你就无法成功插入这个字符。我觉得字符"′"(在utf-8中编码为2032)在latin-1中甚至是不存在的。