解决PHP和GoLang写入csv文件用Excel打开乱码

53 篇文章 7 订阅

使用 CSV 打开文件是正常的,但是使用 Excel 打开文件就出现了中文乱码。导出的 CSV 文件是 UTF-8无BOM编码格式,而我Excel的UTF-8编码格式都是有BOM 的,添加 BOM 之后,乱码就可解决。

PHP

    private function _write_csv($data)
    {
        file_put_contents($this->_file_dir, '');

        $file = fopen($this->_file_dir, 'w');
        fwrite($file, chr(0xEF).chr(0xBB).chr(0xBF)); // 添加 BOM
        $content = [
            '日期',
            '品类',
            '价格',
            '单位',
        ];
        fputcsv($file, $content);
        foreach ($data as $item) {
            $content = [
                $item['product_name'],
                date('Y-m-d', $item['day_time']),
                $item['price'],
                $item['unit_name']
            ];
            fputcsv($file, $content);
        }
        fclose($file);
    }

GoLang

	filePath := "/home/users/weihaoyu/a.csv"
	f, err := os.Create(filePath)
	if err != nil {
		log.Println(err.Error())
		os.Exit(1)
	}
	defer f.Close()
	f.WriteString("\xEF\xBB\xBF")

	writer := csv.NewWriter(f)
	writer.Write([]string{"患者姓名", "患者电话", "医生姓名", "工号", "网络二级科室", "线下二级科室", "订单ID", "患者创建时间", "问诊状态", "问诊开始时间", "结束时间"})
	for _, v := range result {
		writer.Write([]string{v.PatientName, v.PatientMobile, v.DoctorName, v.DoctorCode, v.DeptNameOnline, v.DeptName, v.OrderCode, v.CreateTime, v.Status, v.StartTime, v.EndTime})

		for _, w := range v.Message {
			writer.Write([]string{w.UserName, fmt.Sprintf("%v\n", w.Content)})
		}
	}
	writer.Flush()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AirGo.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值