mysql - python和mysql之间的编码问题

标签 mysql utf-8 character-encoding pyqt

从我的 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_areaself.ui.text_area.toPlainText() 的类型。希望它已经是一个 Unicode 字符串。如果是:一切都准备好了。如果不是:它是一个字节字符串,可能以 UTF-8 编码,因此您可以使用 theresult.decode('utf8') 对其进行解码,这将为您提供一个 Unicode 对象。

一旦您的代码处理所有 Unicode 对象并且不再需要编码的字节字符串,您就不需要再进行任何类型的编码或解码。只需将字符串直接从 PyQT 传递到 MySQL 即可。

关于mysql - python和mysql之间的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8848278/

相关文章:

mysql - 我怎样才能加快这个 MySQL 查询的速度,找到最接近给定纬度/经度的位置?

mysql - 具有 mysql 数据源的 Grails 应用程序不存储复选框位值

python - 带尖音符的拉丁字母 : DjangoUnicodeDecodeError

character-encoding - 字符集名称 : Are there any other commonly used "misspellings" of charsets such as "UTF8"?

mysql - 如何在 Windows 上设置 MySQL 以通过 Groovy JDBC 连接接受 UTF-8 数据

mysql - SQL 内部连接 ​​2 个表

php - 在多个文件上传(PHP/Mysql)中,图像存储在单列中。想要将每个图像存储在具有相同 id 的单行中

mysql - 将表的所有数据(具有两种编码数据)转换为单一编码 utf8 或 latin1

php - UTF-8 可以处理任何语言吗?

java - 试图在 Java 中显示阿拉伯字符