gpt4 book ai didi

php - 在 MySQL 查询之前解码 ISO-8859-1 并编码为 UTF-8

转载 作者:行者123 更新时间:2023-11-29 07:13:58 25 4
gpt4 key购买 nike

如果我做得对的话,我有点卡住了。

我有一个 ISO-8859-1 文件(非常确定)。我的 MySQL 数据库采用 utf-8 编码。这就是为什么我想先将文件转换为 UTF-8 编码字符,然后才能将其作为查询发送。例如,首先我将 file.txt 的每一行重写为 file_new.txt 使用。

line = line.decode('ISO-8859-1').encode('utf-8')

然后我保存它。接下来,我创建一个 MySQL 连接并使用以下查询创建一个游标,以便所有数据都以 utf-8 格式接收。

query = 'SET NAMES "utf8"'
cursor.execute(query)

接下来,我重新打开 file_new.txt 并将每一行输入 MySQL。这是获取 MySQL utf-8 编码表的正确方法吗?或者我错过了什么关键部分吗?

现在接收此数据。我也使用 'SET NAMES "utf8"" 。但是当我将 header 内容类型设置为

时,收到的数据给了我问号 �
header("Content-Type: text/html; charset=utf-8");

另一方面,当我设置

header("Content-Type: text/html; charset=ISO-8859-1");

它工作正常,但数据库中的其他 utf-8 编码数据正在变得困惑。所以我猜测 file.txt 中的数据仍未编码为 utf-8。谁能解释一下为什么吗?

PS:在阅读每一行之前,我会替换一个字符并将file.txt保存到file.txt.tmp。然后我读取此文件以获取 file_new.txt。不知道是否会对原始文​​件编码造成问题。

f1 = codecs.open(tsvpath, 'rb',encoding='iso-8859-1')
f2 = codecs.open(tsvpath + '.tmp', 'wb',encoding='utf8')
for line in f1:
f2.write(line.replace('\"', '\''))
f1.close()
f2.close()

在下面的示例中,我使用 utf-8 编码的波斯语数据,这是正确的,但其他非英语文本出现在“问号”中。这正是我的问题。

示例:已删除。

最佳答案

欢迎来到 unicode 和 windows 的奇妙世界。我发现这个网站对于理解我的字符串出了什么问题非常有帮助 http://www.i18nqa.com/debug/utf8-debug.html 。您需要的另一件事是一个十六进制编辑器,例如 HxD 。有很多地方可能会出错。例如,如果您正在文本编辑器中查看文件 - 它可能会试图提供帮助并默默地更改您的编码。

从原始数据开始,以 HxD 格式查看并查看编码是什么。在 Hxd 中查看您的结果,看看是否发生了您期望的更改。重复执行过程中的步骤。

如果没有完整的代码和示例数据,很难说问题出在哪里。我的猜测是你在二进制文件上用单引号替换双引号是罪魁祸首。

另请查看The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)by Joel Spolsky

关于php - 在 MySQL 查询之前解码 ISO-8859-1 并编码为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38650968/

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