如何用PHP转换CSV's到UTF-8


How to convert CSV's to UTF-8 with PHP

我在网上找遍了,也找不到答案。

我正在从一个我无法控制的来源中抓取数千个CSV文件。CSV可以是任意字符编码。所以我需要将它们全部转换为UTF-8。

我在网上读到,如果你把utf-8转换成utf-8的数据得到混乱,所以我要做的是检测文件的字符编码,如果它不是utf-8我想把它转换成utf-8(我计划使用iconv)。

我已经在堆栈溢出(和其他网站)上尝试了所有方法,但我似乎无法获得文件的当前编码。

如果我使用

mb_detect_encoding(file_get_contents($csvPath), mb_detect_order(), TRUE);

mb_detect_encoding(file_get_contents($csvPath),'auto');

有没有人对我如何检测CSV的编码有任何建议,或者有更好的方法,我可以在不知道原始编码的情况下转换文件。

经过几个小时的反复试验,我终于想出了办法。忘了mb_detect_encoding吧,没用的。

转到shell,使用iconv(在OSX和Linux上默认安装)。

$output = shell_exec("file --mime-encoding GBP_AUD_Week1.csv");
$output = str_replace("$csvPath: ", '', $output);

给出当前文件编码

shell_exec(iconv -f $output -t utf-8 GBP_AUD_Week1.csv > GBP_AUD_Week1Converted.csv);

注意:我试图覆盖文件而不是创建一个新文件,但是当我这样做时,文件是空白的,编码是二进制的。