如何在Laravel中使用shift-jis编码导出csv文件? [英] How to export csv file with shift-jis encoding in laravel?

查看:335
本文介绍了如何在Laravel中使用shift-jis编码导出csv文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 laravel-excel 导出csv文件.要导出,代码如下所示,

I am using laravel-excel to export csv file. To export, the code is like below,

 return Excel::download(new Export(results,$header), "test.csv");

Export.php文件就像

And the Export.php file is like,

namespace App\AllClass;

use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;

class Export implements FromCollection,WithHeadings
{
    private $myArray;
    private $header;

    public function __construct($myArray,$header){
        $this->myArray = $myArray;
        $this->header = $header;
    }

    public function collection()
    {
        $data = mb_convert_encoding($this->myArray,"SJIS", "UTF-8");
        // dump($data);
        return collect($data);
    }


    public function headings(): array
    {
        $header = mb_convert_encoding($this->header,"SJIS", "UTF-8");
        // dump($header);
        return $header;
    }
}

如您所见,在创建excel之前,我正在转换数据.不进行转换,我就可以完美地以UTF-8格式导出.但是在转换为shift-jis之后,它将删除所有日语字符.但是,如果我在返回之前转储标头,则显示的是乱码.不能像csv文件那样为空字符串.

As you can see, I am converting the data before creating excel. Without converting I can export perfectly in UTF-8 format. But after converting to shift-jis, it is deleting all Japanese character. However, if I dump the header before returning, it is showing me gibberish data; not empty string like the csv file.

推荐答案

我解决了.
让我在这里分享我的解决方案.
Laravel Excel默认不支持它.但是我们可以通过简单的方法来做到这一点.

I resolved it.
Let's me share my solution here.
Laravel Excel not support it by default. But we can do it by simple way.

  1. 在下载前获取csv内容:\ Excel :: raw

  1. Get csv content before download: \Excel::raw

转换为另一种编码:mb_convert_encoding https://docs.laravel-excel.com/3.1/exports/collection.html#storing-raw-contents

Convert to another encoding: mb_convert_encoding https://docs.laravel-excel.com/3.1/exports/collection.html#storing-raw-contents

下载csv.

$ exportedObject =新\ App \ Exports \ ClassExport($ exportDataArray,$ fileName);
$ csvContent = \ Excel :: raw($ exportedObject,$ exportedObject-> writerType);

$exportedObject= new \App\Exports\ClassExport($exportDataArray, $fileName);
$csvContent = \Excel::raw($exportedObject, $exportedObject->writerType);

$ csvContent = mb_convert_encoding($ csvContent,'SJIS','auto');

$csvContent = mb_convert_encoding($csvContent, 'SJIS', 'auto');

//就我而言,我将csv上传到S3.$ storageInstance = \ Storage :: disk('s3_import_csvs');
$ putFileOnStorage = $ storageInstance-> put($ fileName,$ csvContent);

// In my case, I upload my csv to S3. $storageInstance = \Storage::disk('s3_import_csvs');
$putFileOnStorage = $storageInstance->put($fileName, $csvContent);

这篇关于如何在Laravel中使用shift-jis编码导出csv文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆