使用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