我编写了一些代码来解析制表符分隔的文件并将其导入 MySQL 表中。该文件是 UTF-8,MySQL 表也是如此。
导入有效,但当我查看表中字段中的数据时,所有其他字符都显示为 � 的 UTF-8 替换字符。例如,原始文件中的数字 4308817 在数据库中显示为“4�3�0�8�8�1�7”。 我的数据中确实有一些 UTF-8 字符(如 ë 等),所以这是必需的。
我已经尝试了 utf8_encode、decode、mb_convert_encoding 等各种方法,但似乎没有什么能让这些在没有 � 字符的情况下显示出来。
$lines = file($dir . '/' . $file);
foreach ($lines as $line_num => $line) {
$arr = explode("\t", $line);
if($line_num > 0) {
$idx = 0;
$AddSQL = "INSERT INTO `$table` VALUES(";
foreach ($arr as $field) {
$value = $arr[$idx++];
$AddSQL .= "\"" . str_replace('"', '\"', trim($value)) . "\", ";
}
$AddSQL = substr($AddSQL, 0, strlen($AddSQL) - 2);
$AddSQL .= ")";
$dbconn->query($AddSQL);
}
}
看起来我刚刚通过偶然发现这个函数找到了解决方案:https://www.php.net/manual/en/uconverter.transcode.php
mb_convert_encoding 对我不起作用,但这确实有效:
$line = UConverter::transcode($line, 'UTF-8', 'UTF-16BE');