gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:24:31 27 4
gpt4 key购买 nike

我有一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com