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

Ton*_*y-M 6 php linux csv bash character-encoding

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

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

此时php函数 mb_detect_encoding总是返回utf8.我试过:

<?php 
mb_detect_encoding(file_get_contents($_FILES["csv_uploadfile"]["tmp_name"]));
Run Code Online (Sandbox Code Playgroud)

要么

<?php 
mb_detect_encoding(file_get_contents($saved_file_path));
Run Code Online (Sandbox Code Playgroud)

mb_detect_encoding返回utf8.

如果我使用bash命令

$ file -bi csv_import_1378376486.csv |awk -F "=" '{print $2}'
Run Code Online (Sandbox Code Playgroud)

它再次出现了iso-8859-1

所以,当我尝试

iconv --from-code=iso-8859-1 --to-code=utf-8 csv_import_1378382527.csv 
Run Code Online (Sandbox Code Playgroud)

它不可读.

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

Kle*_*owy 7

正如有人注意到了PHP文档在这里:

如果您尝试使用mb_detect_encoding()来检测字符串是否有效UTF-8,请使用严格模式,否则它就毫无价值.

所以你应该true在检测编码时尝试使用param:

mb_detect_encoding($str, mb_detect_order(), TRUE);
Run Code Online (Sandbox Code Playgroud)

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