我通常没有关于charset的问题,但是这个我没有得到问题所在。
function categories($host, $user, $pw, $bd){
$file_handle = fopen("categories.csv", "rb");
$mysqli = new mysqli($host, $user, $pw, $bd);
$mysqli->set_charset('utf8');
while (!feof($file_handle) ) {
$line_of_text = fgets($file_handle);
$parts = explode(';', $line_of_text);
$description = $parts[1];
$parent = $parts[2];
$query = $mysqli->prepare("INSERT INTO categories (`description`, parent) VALUES(?, ?)");
$query->bind_param("si", $description, $parent);
$query->execute();
}
fclose($file_handle);
}
我对其他文件(如国家/地区等)有相同的代码,我对charset没有任何问题。
如您所见,我一如既往地使用$mysqli->set_charset('utf8');
代码。如果我回显$description
变量,我会得到正确的字符(它们主要是葡萄牙语)。
这是我到目前为止所尝试的:
$query = $mysqli->prepare("SET NAMES 'utf8'"); // inside the function
$query->execute();
header('Content-Type: text/html; charset=utf-8'); // in the top of the page
但它继续在数据库中添加如下词:Feij?o(Feijão),Ch?s(Chás)。
我觉得这很愚蠢,因为我确实插入了另一张表,就像我说的那样,带有重音的国家名称没有任何问题。
有什么猜测吗?
编辑:使用utf8_encode解决。
$query->bind_param("si", utf8_encode($description), $parent);
答案 0 :(得分:2)
问题可能在文件“categories.csv”中,不能是UTF-8 ......
要将文件从“ASCII”转换为UTF-8,您可以使用
iconv -f WINDOWS-1252 -t UTF-8 categories.csv