gpt4 book ai didi

php - ARC2(PHP 语义网库)错误地将 UTF-8 文件双重转换为 UTF-8

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

使用 ARC2 , 文本数据被破坏。

我的 RDF 输入文件是 UTF-8 格式的。它通过 LOAD <path/to/file.rdf> 加载到使用 MySQL 后端的 ARC2 中。询问。 MySQL 数据库也是 UTF-8 格式,通过 PHPMyAdmin 进行检查可以确保这一点。

但是,文本数据已损坏。经过多次转换检查,问题似乎是原来的 UTF-8 文件被认为是 ISO-8859-1,并再次转换为 UTF-8。

示例:“surmonté”→“surmonteÌ”。

这个“surmonteÌ”实际上在数据库中以 UTF-8 格式提供。

这是否与 ARC2 打开文件的方式有关(深入挖掘代码,不详尽但相当深入,没有发现任何可疑之处),或者这可能是 PHP 和 MySQL 的更普遍情况?

如何确保导入的数据没有被错误重新编码,而是作为原始数据?

最佳答案

ARC2 使用两个函数:$store->setUp() ,这CREATE s TABLE s 和 DATABASE如果需要的话;和 query(LOAD… ,问题中有详细说明。

事实证明,setUp()部分必须在与 load 相同的脚本中调用部分。至少,不是在同一次执行期间。我采取的解决方案是制作两个单独的脚本,一个用于初始化数据库,另一个用于加载数据,但是在完成后简单地注释掉 init 部分也可以。无论如何,诀窍是确保加载不会在初始化后立即发生。

发生这种情况是因为 SET NAMES utf8仅设置数据库连接时的编码规范 after collation detection ,如果数据库刚刚创建,MySQL 似乎无法正确检测到。我做了一个pull request的修复。


附带说明一下,使用 LOAD <path/to/file.rdf 效率不高问题的构造:这将被计算为相对 web 地址,调用服务器通过网络从自身下载。使用如下结构效率更高:

 $store->query('LOAD <file://' . dirname(__FILE__) . '/path/to/file.rdf>')

关于php - ARC2(PHP 语义网库)错误地将 UTF-8 文件双重转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331239/

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