我有 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,我无法检测到它。 任何人都可以帮我解决这个问题吗?
答案 0 :(得分:6)
正如有人在PHP文档here中注意到的那样:
如果您尝试使用mb_detect_encoding()来检测字符串是否为 有效的UTF-8,使用严格模式,否则就没用了。
因此,在检测编码时应尝试使用true
参数:
mb_detect_encoding($str, mb_detect_order(), TRUE);
如果您可以预测某些可能的编码,则可以列出它们而不是使用mb_detect_order()
。