解决二进制文件下载乱码问题

好久没写博客了,突然想记录点什么。

前段时间遇到一个问题,记录一下,以后遇到可以找到解决方案。

事情的原由是这样的,后端返回一个二进制的csv文件让前端进行下载,前端采用axios,responseType为blob进行下载,看到这里,其实整个文件就已经下载完成了,以为万事大吉,其实不然。

打开文件一看,居然有乱码,这就让我摸不着头脑了。

贴一下伪代码:

复制代码
 1 axios.request({ data: data, method: 'POST', url: url, responseType: 'blob'}).then(res => {
 2     var data = res.data
 3     var blob = new Blob([data])
 4     var href = window.URL.createObjectURL(blob)
 5     var a = document.createElement('a')
 6     a.href = href
 7     a.setAttribute('download', 'xxx.csv')
 8     a.click()
 9     window.URL.revokeObjectURL(href)
10 })
复制代码

下载代码其实没上面问题,就是不知道为什么下载下来中文会是乱码。

其实解决办法也很简单,在网上找到的,那就是在使用blob读取内容时,需要加上'\ufeff',使文件以utf-8的编码模式,同时解决中文乱码问题。

就是这么神奇,贴一下修改之后的代码:

复制代码
axios.request({ data: data, method: 'POST', url: url, responseType: 'blob'}).then(res => {
     var data = res.data
     var blob = new Blob(['\ufeff', data])
     var href = window.URL.createObjectURL(blob)
     var a = document.createElement('a')
     a.href = href
     a.setAttribute('download', 'xxx.csv')
     a.click()
     window.URL.revokeObjectURL(href)
 })
复制代码

好了,以上就是本次问题的解决方案,我想,以后凡是涉及到文件下载的,都可以采用这个方法以确保下载文件的正确性吧。

posted on   薛将军  阅读(579)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示