首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复在php中导出文件csv时文件csv中的错误字体UTF8

如何修复在php中导出文件csv时文件csv中的错误字体UTF8
EN

Stack Overflow用户
提问于 2012-09-21 17:28:26
回答 3查看 6.6K关注 0票数 0

我在php中导出csv为:

代码语言:javascript
复制
$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出错。例如:防本部コーshow in file csv:ˆé˜²çœ?ƒ¨ă,³ăƒ²ăƒ‰

我能为您做点什么?谢谢

EN

回答 3

Stack Overflow用户

发布于 2012-09-21 17:31:12

这里已经讨论过了:

How can I output a UTF-8 CSV in PHP that Excel will read properly?

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

票数 1
EN

Stack Overflow用户

发布于 2012-09-21 17:34:15

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

代码语言:javascript
复制
$fp = chr(255).chr(254).mb_convert_encoding($fp,"UTF-16LE","UTF-8"); 

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

代码语言:javascript
复制
$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);

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

票数 1
EN

Stack Overflow用户

发布于 2014-01-20 14:41:41

尝试此函数将会起作用:

代码语言:javascript
复制
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();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12527818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档