2013-09-05 14 views
5

`ve haben data.csv Datei, die auf den Server hochgeladen werden müssen, analysiert ....wie Codierung von hochgeladenen CSV-Datei erfassen

Diese Datei unterschiedliche Kodierungen haben. Ich muss es erkennen und zu utf8 konvertieren.

In diesem Moment php Funktion mb_detect_encoding immer UTF-8 zurück. i tryed:

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

oder

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

mb_detect_encoding kehrt utf8.

wenn ich verwende bash Befehl

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

es rerurns iso-8859-1

so, wenn ich versuche

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

es nicht lesbar ist.

Die echte Codierung ist cp1251, ich kann es nicht erkennen. Kann mir jemand helfen, dieses Problem zu lösen?

+4

Dies ist ein inhärentes Problem von Textcodierungen. Sie können sie nicht immer richtig erkennen, Sie können sie meistens nur erraten. Es sei denn, es sind einige Metainformationen verfügbar. – scai

Antwort

4

Als jemand in der PHP-Dokumentation bemerkt here:

Wenn Sie versuchen, mb_detect_encoding() zu verwenden, um festzustellen, ob ein String ist gültige UTF-8, den strikten Modus verwenden, ist es sonst ziemlich wertlos.

So sollten Sie versuchen, die true param verwenden, wenn Codierung Erkennung:

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

Wenn Sie einige mögliche Kodierungen vorhersagen können, können Sie diese Liste anstelle mb_detect_order() zu verwenden.

+0

hast du mein Leben gerettet – elboletaire