使用PHP 5.3 fgetcsv
函數,由於編碼問題,我遇到一些問題。請注意,該文件具有西班牙語「特殊」拉丁字符,如圖形口音á,é,íï...等php fgetcsv - 字符集編碼問題
我得到的CSV文件導出一些結構化數據我有一個MS 2008的Mac Excel文件。
如果我用Mac OS X TextEdit
應用程序打開它,一切似乎都會變得完美。
但是當我回到我的PHP程序並嘗試使用fgetcsv PHP函數讀取CSV時,我無法正確讀取字符集。
/**
* @Route("/cvsLoad", name="_csv_load")
* @Template()
*/
public function cvsLoadAction(){
//setlocale(LC_ALL, 'es_ES.UTF-8');
$reader = new Reader($this->get('kernel')->getRootDir().'/../web/uploads/documents/question_images/2/41/masiva.csv');
$i = 1;
$r = array("hhh" => $reader -> getAll());
return new Response(json_encode($r, 200));
}
正如你所看到的,我曾嘗試也使用setlocale
來es_ES.UTF-8
。但沒有任何工作。
讀一部分來自這裏:
public function getRow()
{
if (($row = fgetcsv($this->_handle, 10000, $this->_delimiter)) !== false) {
$this->_line++;
return $this->_headers ? array_combine($this->_headers, $row) : $row;
} else {
return false;
}
}
看看我得到的$ row變量每行讀數後:
那些?
字符被認爲是與圖形元音他們的口音。
那裏的任何線索?如果我使用MS Excel for Windows,它會工作嗎?如何在運行時知道文件的確切編碼並在讀取之前進行設置? (對那些西班牙語的人來說,不要因爲這些文本中的這種可怕的醫療材料而受到驚嚇;))。
同樣的問題。 UTF8編碼的CSV文件可以在一臺服務器上正常導入,但不會導入其他服務器。結束寫我自己的CSV閱讀器。 –
FWIW,你不能不知道*文件的編碼而不被告知。你可以猜出你什麼時候閱讀它,然後進行相應的轉換,但是沒有什麼東西比被告知編碼更可靠。 – cmbuckley
謝謝cbuckley。 「相應地轉換」是什麼意思,嘗試猜測並詢問用戶是否批准導入?如果不是,繼續嘗試其他編碼的原點? – ElPiter