我们每天从客户那里收到一个 CSV 文件上传,他们说该文件采用 UTF16-LE 编码。但是,当我在 CSV 文件的每一行上运行 iconv('UTF16-LE', 'UTF8')
时,进入数据库时看起来像这样:
Z�A�A�0�7�3�7
IE,每个字符之间都有一个 [?] 东西。
我尝试了 utf8_encode 以及 iconv 和不同编码类型的各种组合,以消除此问题。有没有人有这方面的经验以及如何将未知或不受支持的编码转换为 UTF8,或者至少是 PHP 和 MySQL 可读的编码?
最佳答案
UTF16 中的一半字符无法转换为 UTF8。 UTF16 需要加 8 位。
UTF16 已经编码到每个字符串中,LE 或 BE。只是为了好玩,您可以尝试从 UTF16 转换为 UTF8(没有“-LE”)。这会告诉您您的客户是否就 LE 向您撒谎。但最有可能的情况是数据不合适。
一种解决方案是将其作为字节数组 (BINARY(x)) 而不是文本存储在数据库中。
关于php - 处理 PHP/MySQL 导入的奇怪编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16345854/