如何在wxpython中传递字符′?

0 投票
1 回答
603 浏览
提问于 2025-04-17 17:13

当我试图通过 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中甚至是不存在的。

撰写回答