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

标签 php mysql encoding rdf utf

使用 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/

相关文章:

php - 在 Yii2 控制台命令中获取用户输入

php - laravel 5.2用户登录时如何获取api_token

php - 如何设置表单的 DB 代码

python - 切换到 Python 3 导致 UnicodeDecodeError

php - Facebook 并行图像上传 - 并行是如何工作的

php 性能 microtime 实际值

php - 上传多张图片到mysql数据库

mysql - 在子句之间转换为连接

iphone - 如何在iPhone SDK中从PCM数据编码AAC数据? (iPhone 开发/音频)

java - HTTPURLConnection Java header 中的 UTF-8 字符