我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP结合vue导出excel出现乱码的解决方法分享

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP结合vue导出excel出现乱码的解决方法分享

在这之前我们先回顾以前用php导出excel,我直接写成方法在这里:

public static function phpExcelList($field, $list, $title='文件',$file_time){
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        foreach ($list as $key => $value) {
            foreach ($field as $k => $v) {
                if ($key == 0) {
                    $sheet->setCellValue($k . '1', $v[1]);
                }
                $i = $key + 2; //表格是从2开始的
                $sheet->setCellValue($k . $i, $value[$v[0]]);
            }
        }
        
        ob_clean();
        header("Content-type:application/vnd.ms-excel;charset=UTF-8");
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'.$title.'.csv"');
        header('Cache-Control: max-age=0');
        $writer = new Csv($spreadsheet);
        $writer->save('php://output');
        exit;
    }

一般有设置charset基本在前端就没啥问题,问题就在于vue导出时就出现乱码了,有可能是这个,大多数网友的解决方案就是在请求里边加上参数:responseType: 'blob', // 表明返回服务器返回的数据类型,但这里我已经提前申明返回的数据是正常的,这时候又会咋样呢?

咱们试试用国产的wps打开吧:

咦?没问题?再用office打开:啊哈》》?what?

那问题出在哪里呢?读入的文件是utf-8格式,下载下来Excel打开乱码,但是用其他编辑器打开并不是乱码,一开始解决问题的思路是,下载文件的时候,是不是没有指定编码方式,导致文件编码方式不对,于是乎使用了Blob里的type参数,硬塞了一个类型以及编码方式,但是这种方法似乎并不管用,仔细读了官方文档之后,关于type的解读如下:

type,默认值为 “”,它代表了将会被放入到blob中的数组内容的MIME类型。

这里明确表明,此type只是一个类型标记,并不会起到转码的作用,想想也是,blob仅仅是内存里开辟的0,1代码,怎么可能在下载的过程中去解码编码呢?

发现这其实是微软家的坑,微软家发明了一个东西叫bom头,关于bom头:

类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入UTF-8 BOM头。记事本等编辑器通过它来识别这个文件是否以UTF-8编码(当然即便没有UTF-8 BOM头记事本也能通过其它方式正确识别UTF-8编码)。

那么如果一个UTF-8编码的字符串的开头处没有BOM头又会发生什么?答:不认识你,乱码给你看

所以我们在这需要手动加一个微软看得懂的BOM头:

window.URL.createObjectURL(new Blob(['\uFEFF' + content]))

总的代码示例如下,不懂可以直接抄:

this.$http.get(common.webapi+'/api/exportExcel',{params:{参数名称:参数值}}, {emulateJSON:true,responseType: 'blob'}).then((res)=>{
              if(res.data){
              const link = document.createElement('a');// 创建a标签
              let blob = new Blob(['\uFEFF' + res.data],{type: 'application/vnd.ms-excel;'}); // 设置文件类型并在返回值前加bom头,避免乱码
              link.style.display = "none";
              link.href = URL.createObjectURL(blob); // 创建URL
              link.setAttribute("download", "数据"+ this.$moment(new Date().getTime()).format("YYYY-MM-DD")+'.csv');
              document.body.appendChild(link);
              link.click();
              document.body.removeChild(link);
              //如果不会出现乱码,直接一句代码搞定:this.$fileDownload(res.data, "发票数据"+ this.$moment(new Date().getTime()).format("YYYY-MM-DD")+'.csv')
             }
           
          })

//如果不会出现乱码,直接一句代码搞定:this.$fileDownload(res.data, "数据"+ this.$moment(new Date().getTime()).format("YYYY-MM-DD")+'.csv'),接下来就是见证奇迹的时刻:

到此这篇关于PHP结合vue导出excel出现乱码的解决方法分享的文章就介绍到这了,更多相关PHP导出excel出现乱码内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP结合vue导出excel出现乱码的解决方法分享

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP结合vue导出excel出现乱码的解决方法分享

这篇文章主要为大家详细介绍了PHP结合vue导出excel出现乱码的解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2023-02-03

java中excel导出乱码解决方法

错误方式:response.setHeader("Content-Disposition", "inline;filename="+ new String(fileName.getBytes(),"utf-8"));String fileName = a
java中excel导出乱码解决方法
2016-02-24

java导出excel时出现文件名乱码解决方法

java解决导出Excel时文件名乱码的方法示例:(推荐:java视频教程)String agent = request.getHeader("USER-AGENT").toLowerCase(); response.setContentType("app
java导出excel时出现文件名乱码解决方法
2021-11-16

mac php导出excel乱码的解决丰富

这篇文章主要介绍“mac php导出excel乱码的解决丰富”,在日常操作中,相信很多人在mac php导出excel乱码的解决丰富问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mac php导出excel乱
2023-06-20

java导出excel乱码原因及解决方法

java导出错误方式与正确方法:(推荐:java视频教程)错误方式:response.setHeader("Content-Disposition", "inline;filename="+ new String(fileName.getBytes(),"ut
java导出excel乱码原因及解决方法
2015-10-16

java导出excel乱码解决方法及原因

java导出错误方式与正确方法:(推荐:java视频教程)错误方式:response.setHeader("Content-Disposition", "inline;filename="+ new String(fileName.getBytes(),"ut
java导出excel乱码解决方法及原因
2019-01-11

如何解决Vue.js导出Excel出现乱码的问题

Vue.js是一款流行的前端 JavaScript 框架。在Vue.js开发中,使用二进制文件来导出Excel文件时,可能会遇到Excel乱码的问题。这篇文章将通过介绍二进制编码的概念和解决方案来帮助大家解决Vue.js导出Excel出现乱码的问题。一、二进制编码二进制编码是计算机中十分重要的概念,这里进行一个简单的介绍。计算机中的数据都是以二进制数存储的,二进制数仅由0和1组
2023-05-14

java导出文件出现文件名乱码解决方法

出现的问题:在chrome浏览器中导出的excel文件名没有出现中文乱码的情况,在测试IE浏览器的时候,导出的文件名乱码了。解决方法:原来的代码:try { response.setContentType("application/vnd
java导出文件出现文件名乱码解决方法
2015-07-21

superset导出乱码及导出报错问题的解决方法

导出乱码问题的解决方法:1. 检查字符编码:确保导出的文件使用的字符编码与当前系统中使用的字符编码一致。可以尝试使用UTF-8编码格式,因为它支持各种语言和字符。2. 检查数据源:确保数据源中的数据没有乱码。如果数据源中存在乱码,导出的文件
2023-09-13

php汉语代码出现乱码的解决方法

小编给大家分享一下php汉语代码出现乱码的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!解决方法:使用header函数设置页面显示的文字编码,例“header("Content-Type:text/html;cha
2023-06-08

php输出csv乱码的解决方法

这篇“php输出csv乱码的解决方法”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“php输出csv乱码的解决方法”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让
2023-06-06

myeclipse导入java项目出现乱码的解决方法

一、将整个project设置编码UTF-8(UTF-8可以最大的支持国际化):windows->Preferences->general->Workspace->Text file encoding->Other框中的Text file encoding改为U
myeclipse导入java项目出现乱码的解决方法
2018-09-22

php导出csv中文乱码的解决方法是什么

本篇内容介绍了“php导出csv中文乱码的解决方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php导出csv中文乱码的解决办法:1
2023-06-25

php验证码输出乱码的解决方法

小编给大家分享一下php验证码输出乱码的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php验证码输出乱码的解决办法:1、检查并修改访问验证码生成方法函数
2023-06-08

php模板类出乱码的解决方法

这篇文章主要介绍了php模板类出乱码的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php模板类出乱码的解决办法:1、检查引用模板的PHP文件;2、设置该文件跟htm
2023-06-22

php变量输出乱码的解决方法

这篇文章主要介绍了php变量输出乱码的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php变量输出乱码的解决办法:1、通过“iconv("GB2312","UTF-8
2023-06-15

php页面输出乱码的解决方法

小编给大家分享一下php页面输出乱码的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!php页面输出乱码的解决办法:1、php文件编码和网页输出编码设置成一致;2、php文件编码和数据库存储的字符编码设置为一致;3、
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录