当我尝试通过wx.python Textctrl插入此文本2′BR
info 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())))
答案 0 :(得分:0)
我假设你在Python 2(不是Python 3)下使用wxPython的unicode版本。
当您在str
的结果上调用self.Text.GetValue()
构造函数时,会出现问题。
wxPython接受所有类型的字符并返回unicode字符串。在您的示例中,Textctrl.GetValue()
返回unicode字符串u"2′BR"
str()
尝试使用默认编码将其转换为字符串,即ascii。 Ascii只能代表128个字符。主要字符“'”未在ascii中表示。这就是你有这个错误的原因。
MySQL数据库的编码是什么?如果你想使用像''“prime这样的奇怪字符,你应该将你的数据库编码设置为utf-8。
然后你应该能够做到:
cur.execute("INSERT INTO TKtable (title) VALUES (%s)", (self.Text.GetValue(),))
您将无法成功插入数据库编码中不存在的字符。 我认为素数“'”(utf-8中的代码2032)素数甚至不存在于拉丁语-1中。