PHP 与 Python 处理存储在数据库中的 Unicode 值

标签 php python mysql unicode

我有一个 PHP 支持的网站,可以处理来自 JSON 的数据输入。 JSON 输入存储在数据库中,然后显示给用户。常规的东西......

现在我正在尝试使用 Python 脚本来处理添加类似数据,但我遇到了 Unicode 问题。即,Python 使用 MySQLdb 输入到数据库中的特殊字符不要在页面显示时立即出来(通过 PHP/HTML)。

这是一个例子:

  • JSON 来源:© 2015


  • 来自 PHP 插入的数据库中的数据:© 2015

  • 从 PHP 数据库插入到 Web 上的样子:© 2015


  • 来自 Python 的数据库中的数据插入 © 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 中复制此行为?

最佳答案

由于您尚未从支持 PHP 的网站生成任何代码,因此我们无法确定它是否正确处理 unicode,或者根本无法处理。如果来自 PHP 插入的数据库中的数据确实(如问题中所述)显示为 © 2015 (特别是 python 字符串 u'\xc2\xa9 2015',注意 u 将其表示为 unicode 字符串)然后您的 PHP 应用程序在插入时实际执行的是使用 utf-8 解码输入的 unicode 字符串编解码器然后在数据库中插入所有内容都编码为 ISO8859-1 (或 latin1 )。加载时,查询返回 latin1 PHP 应用程序使用 utf8 解码的字符串编解码器取回原始 unicode。

对于 Python 代码,因为一切都在 utf8 中完成没有 latin1步骤,当 PHP 脚本尝试加载该数据时,它将尝试解码为字节 \xa9,但失败了。是一个错误,PHP 将错误替换为 \ufffd默认为 unicode 代码点。

要使您的 Python 插入与您的 PHP 网站兼容并作为测试以查看此推断是否正确,请尝试

dbc.execute("INSERT INTO `marks` (`id`, `title`, `comment`)"
    "VALUES (NULL, %s, %s)", [
        title.encode('utf8').decode('latin1'),
        comment.encode('utf8').decode('latin1'),
])

这基本上将所有 unicode 转换为您的 PHP 应用程序期望的原始 latin1 代码点,因为正如我提到的,它可能假设所有表都是 utf8latin1 表示的编码字符串字符集。

关于PHP 与 Python 处理存储在数据库中的 Unicode 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847219/

相关文章:

python - Pyspark drop_duplicates(keep=False)

php - 在 GoDaddy 托管网站上更新 PHP.ini

php - mysqli_begin_transaction()和mysqli_autocommit有什么区别

php - 将第二个表的最新行连接到第一个表的每一行

php - 如何仅通过 Key => Value 更新设置表

python - 需要用python写一个简单的表单数据采集工具供本地使用

python - 如何删除列表项python中的换行符

mysql - inner join和普通的多表选择有什么区别?

mysql - 将两个表(多个列和行)中的数据分组到一行中

php - 如何重定向子文件夹以从主目录读取所有代码?子文件夹中的源代码相似但内容不同