如何检测上传的csv文件的编码

时间:2013-09-05 12:42:55

标签: php linux bash csv character-encoding

我有 data.csv 文件,必须上传到服务器,解析....

此文件可以有不同的编码。我必须检测它并转换为utf8。

此时 php 功能 mb_detect_encoding 始终返回utf8。 我试过:

<?php 
mb_detect_encoding(file_get_contents($_FILES["csv_uploadfile"]["tmp_name"]));

<?php 
mb_detect_encoding(file_get_contents($saved_file_path));

mb_detect_encoding返回utf8。

如果我使用bash命令

$ file -bi csv_import_1378376486.csv |awk -F "=" '{print $2}'

它再次出现了iso-8859-1

所以当我尝试

iconv --from-code=iso-8859-1 --to-code=utf-8 csv_import_1378382527.csv 

它不可读。

真正的编码是cp1251,我无法检测到它。 任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:6)

正如有人在PHP文档here中注意到的那样:

  

如果您尝试使用mb_detect_encoding()来检测字符串是否为   有效的UTF-8,使用严格模式,否则就没用了。

因此,在检测编码时应尝试使用true参数:

mb_detect_encoding($str, mb_detect_order(), TRUE);

如果您可以预测某些可能的编码,则可以列出它们而不是使用mb_detect_order()