2013-09-05 38 views
5

I`ve有data.csv文件時,必須上傳到服務器,解析....如何檢測上傳CSV文件的編碼

此文件可以有不同的編碼。我必須檢測它並轉換爲utf8。

此時PHP功能mb_detect_encoding總是返回UTF-8。 我tryed:

<?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}' 

它rerurns ISO-8859-1

所以當我嘗試

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

它是不可讀的。

真正的編碼是cp1251,我無法檢測到它。 任何人都可以幫助我解決這個問題嗎?

+4

這是文本編碼的固有問題。你不能總是正確地檢測它們,你大多數時候只能猜測它們。除非有一些元信息可用。 – scai

回答

4

正如有人在PHP文檔here注意到:

如果您嘗試使用mb_detect_encoding()來檢測一個字符串是否是 有效UTF-8,使用嚴格的模式,這是非常不值錢,否則。

所以,你應該嘗試檢測編碼時使用true PARAM:

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

如果你能預測一些可能的編碼,您可以列出它們而不是使用mb_detect_order()

+0

你救了我的命 – elboletaire