PHP fgetcsv - 字符集编码问题(php fgetcsv - charset encod

2019-07-03 16:51发布

使用PHP 5.3 fgetcsv功能,我遇到由于编码问题的一些问题。 请注意,文件有西班牙“特殊”拉丁字符像图形口音A,E,I I,等...

我得到的CSV文件中的Mac Excel文件的MS 2008年出口了一些结构化的数据我有。

如果我在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));
}

正如你所看到的,我曾尝试也使用setlocalees_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;
    }
}

看看我在每一行读取后$行变量得到:

那些? 字符应该是与他们的图形口音的元音。

那边的任何线索? 如果我用MS Excel的Windows它的工作? 我怎么能知道在运行时文件的准确编码和读取之前设置呢?

(对于那些讲西班牙语的人,不要惊恐,在这些文本,这么恶劣的医疗东西;))。

Answer 1:

试试这个:

function convert( $str ) {
    return iconv( "Windows-1252", "UTF-8", $str );
}

public function getRow()
{
    if (($row = fgetcsv($this->_handle, 10000, $this->_delimiter)) !== false) {
        $row = array_map( "convert", $row );
        $this->_line++;
        return $this->_headers ? array_combine($this->_headers, $row) : $row;
    } else {
        return false;
    }
}


Answer 2:

这可能与方式做节约当Excel编码文件。

尝试上传.xls文件到Google Docs和下载为.csv



文章来源: php fgetcsv - charset encoding problems