【发布时间】:2015-10-29 02:20:25
【问题描述】:
我有一个 PHP 支持的网站,可以处理来自 JSON 的数据输入。 JSON 输入存储在数据库中,然后显示给用户。普通的东西……
现在我正在尝试使用 Python 脚本来处理添加类似数据的问题,但遇到了 Unicode 问题。即,Python 使用MySQLdb 输入数据库的特殊字符在显示页面时(通过 PHP/HTML)不会正确显示。
这是一个例子:
-
JSON 来源:
© 2015
来自 PHP 插入的数据库中的数据:
© 2015-
PHP DB 在网络上的样子插入:
© 2015
来自 Python 的 DB 中的数据插入
© 2015- 从 Python 数据库插入到 Web 上的样子:
� 2015
MySQLdb 的通用代码(comment 是 <type 'unicode'>,我遇到了麻烦):
db = MySQLdb.connect("localhost", "root", "pass", "database",
use_unicode=True, charset='utf8' )
dbc = db.cursor()
dbc.execute("INSERT INTO `marks` (`id`, `title`, `comment`) VALUES (NULL, %s, %s)",
[ title, comment ])
db.commit()
db.close()
在输出端,我使用 PHP DOMDocument 将文本加载并打印为 HTML:
@$descriptionText->loadHTML( '<meta http-equiv="content-type" content="text/html; charset=utf-8">'.$mark['Mark']['comment'] );
echo $descriptionText->saveHTML();
因此,PHP 正在对数据库中的数据进行编码,以便在转储出来时看起来很奇怪,但在编码为 HTML 时可以正确呈现。有什么办法可以在 Python 中复制这种行为?
【问题讨论】:
-
我厌倦了将 db 设置为不使用 unicode 的测试:
db = MySQLdb.connect("localhost", "root", "pass", "database")但无论哪种方式似乎都无关紧要(仍然得到� 2015输出)。 -
你正在深入。 Mojibake (
©);�是另一个。如果您需要进一步的建议,请启动另一个线程,并包含SELECT col, HEX(col) FROM .. WHERE ..以作为这两种情况的示例。 -
谢谢@RickJames;那条评论很旧,实际上在@metatoaster 下面的回答之后我就开始工作了