0

我将 php 中的 csv 导出为:

$fp = fopen($filename, 'w');

            foreach ($list as $fields) {
                if(!empty($fields))
                fputcsv($fp, $fields);
                else
                fputcsv($fp, ' ');

            }
            $fp = chr(255).chr(254).mb_convert_encoding($fp,"UTF-16LE","UTF-8"); 
            fclose($fp);

当我打开 csv 时,字体 UTF_8 是错误的。例如:防本部コー在文件 csv 中显示:æ¶ˆé˜²æœ¬éƒ¨ă‚³ăƒ¼ăƒ‰</p>

我可以帮你吗?谢谢

4

3 回答 3

1

这已经在这里讨论过:

如何在 PHP 中输​​出 Excel 可以正确读取的 UTF-8 CSV?

您可能还想在替代文本编辑器中检查 CSV 以排除该编辑器。

于 2012-09-21T09:31:12.003 回答
1

$fp是指向文件的指针资源。它不是一个字符串,你不能这样做:

$fp = chr(255).chr(254).mb_convert_encoding($fp,"UTF-16LE","UTF-8"); 

要将 UTF-16 数据写入文件,您需要在写入之前对其进行转换,而不是事后:

$fp = fopen($filename, 'w');

fwrite($fp, chr(255).chr(254));

foreach ($list as $fields) {
    foreach ($fields as &$field) {
        $field = mb_convert_encoding($field, 'UTF-16LE', 'UTF-8');
    }
    fputcsv($fp, $fields);
}

fclose($fp);

不知道这是否真的输出了您需要的数据,但它修复了明显的错误。

于 2012-09-21T09:34:14.930 回答
0

试试这个功能会起作用:

public static function exportCSVFile($data = array(), $headers = array(), $delimiter = ",", $csvfilename = "CSVFile") {
        ob_clean();
        ob_start();
        $csvfilename = $csvfilename . "_" . date("Y_m_d_h_i_s") . ".csv";
        $file_handler = fopen("php://output", 'w');
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Type: application/csv");
        //header( "Content-Type: application/csv;charset=utf-8" );
        header("Content-Disposition: attachment;filename={$csvfilename}");
        header("Content-Transfer-Encoding: binary");
        foreach ($data as $fields) {
            $_str = implode($delimiter, $fields);
            $fields = explode($delimiter, utf8_decode($_str));
            fputcsv($file_handler, $fields, $delimiter, $enclosure = '"');
        }
        fclose($file_handler);
        ob_flush();
        exit();
    }
于 2014-01-20T06:41:41.040 回答