如何在读取CSV文件时修复编码?

时间:2013-09-11 12:27:22

标签: php csv encoding utf-8

我正在读取PHP中的CSV文件,据我所知 - 这些类型的文件可以包含任何由hoomans omg 发明的编码等等...我猜我有一个MacRoman ANSI编码的CSV,我正在使用Mac。

到目前为止,这么好(不是很好,但那是另一个话题)..现在,在迭代这些行时,我有一个像这样的值:

Z�rich

显然,它应该是“苏黎世” - “ü”缺失......

现在,我几乎尝试过任何事情...... mb_detect_encoding正在说“假”,所以,他不明白它是什么......

然后我在这里找到了Sebastian Grignoli的天才课 - > Detect encoding and make everything UTF-8

看起来不错,但......我得到的只是:

ZŸrich

不是我所预期的“ü”:D

现在我发现,“utf8_encode”会以某种方式起作用,它会产生:

Z\u009Frich

但是......现在怎么样?如果我把它直接放在数据库中,最终的值是“Zrich”,这意味着它仍然不是真正的UTF-8,或者数据库刚刚与转义的变体挣扎?当我对该值进行mb_detect_encoding时,他现在说“UTF-8”..很好..但我怎么能走得更远呢?我怎样才能在UTF-8中以正确的方式获得“苏黎世”?

2 个答案:

答案 0 :(得分:3)

您可以使用iconv进行转化。在我的安装中,MacRoman编码只调用"MAC"

$city = "Z\x9frich";
$city = iconv("MAC", "UTF-8", $city); 
echo $city; // Output: Zürich

答案 1 :(得分:1)

尝试使用iconv首先转换所有文件。然后导入。 或者迭代每一行并用iconv转换。

您必须知道文件的原始编码。