2013-09-05 21 views
5

`ve mieć Data.csv plik, które muszą być przesłane do serwera, analizowany ....jak wykryć kodowanie przesłanego pliku csv

Ten plik może mieć różne kodowania. Muszę to wykryć i przekonwertować na utf8.

W tej chwili php funkcja mb_detect_encoding zawsze powrócić utf8. tryed:

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

lub

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

mb_detect_encoding zwraca utf8.

jeśli mogę użyć bash polecenie

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

to rerurns iso-8859-1

więc gdy próbuję

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

nie jest czytelny.

Rzeczywistym kodowaniem jest cp1251, ponieważ nie można go wykryć. Czy ktoś może mi pomóc rozwiązać ten problem?

+4

Jest to nieodłączny problem kodowania tekstu. Nie zawsze możesz je poprawnie wykryć, możesz je odgadnąć tylko przez większość czasu. O ile nie ma dostępnych metainformacji. – scai

Odpowiedz

4

Jak ktoś zauważył w docs PHP here:

Jeśli spróbujesz użyć mb_detect_encoding(), aby wykryć, czy ciąg jest ważny UTF-8, użyj trybu ścisłego, to jest całkiem bezwartościowe inaczej.

Więc należy spróbować użyć true param po wykryciu kodowanie:

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

Jeśli można przewidzieć kilka możliwych kodowań, można wymienić je zamiast używania mb_detect_order().

+0

uratowałeś mi życie – elboletaire

Powiązane problemy