从我的 PyQt 应用程序到我的 mysql 数据库,我遇到了一个奇怪的编码问题。 我的意思是奇怪,因为它在一种情况下有效,而在其他情况下无效,尽管我似乎对所有人都做了完全相同的事情。
我的流程如下:
我有一些 QFocusOutTextEdit 元素,我在其中编写可能包含重音符号和内容的文本(é、à、è、...)
我得到的文字是:
text = self.ui.text_area.toPlainText()
text = text.toUtf8()
然后将其插入我的数据库中:
text= str(text).decode('unicode_escape').encode('iso8859-1').decode('utf8')
我还将我的数据库、特定表和表的特定列的字符集设置为utf8。
它适用于我的一个文本区域,而对于其他文本区域,它会在我的数据库中放入奇怪的字符。
对此有任何提示!
已解决: 抱歉打扰了,显然我的数据库中有一些字段不是最新的,这以某种方式阻止了编码过程。
最佳答案
您正在进行大量编码、解码和重新编码,即使您知道所有这些意味着什么,也很难理解。您应该尝试将其简化为仅在 native 使用 Unicode 字符串。在Python 3中,这意味着str
(普通字符串),在Python 2中,这意味着unicode
(u“这种字符串”
)。 p>
安排与 MySQL 数据库的连接以在输入和输出上使用 Unicode。如果您使用 Sqlalchemy 等高级工具,您可能不需要执行任何操作。如果您直接使用MySQLdb
,请确保将charset="UTF8"
(这意味着use_unicode
)传递给connect()
方法。
然后确保您从 PyQT 获得的值是 unicode 值。我不知道PyQT。检查 self.ui.text_area
或 self.ui.text_area.toPlainText()
的类型。希望它已经是一个 Unicode 字符串。如果是:一切都准备好了。如果不是:它是一个字节字符串,可能以 UTF-8 编码,因此您可以使用 theresult.decode('utf8')
对其进行解码,这将为您提供一个 Unicode 对象。
一旦您的代码处理所有 Unicode 对象并且不再需要编码的字节字符串,您就不需要再进行任何类型的编码或解码。只需将字符串直接从 PyQT 传递到 MySQL 即可。
关于mysql - python和mysql之间的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8848278/