new Blob()保存.csv或者.xlsx文件后中文乱码问题!!!

由于未提供博客具体内容,无法给出包含关键信息的摘要。

 

 

在使用 `Blob` 对象进行文件下载时,中文乱码是一个常见的问题,通常与字符编码、MIME 类型设置以及数据流的处理方式有关。以下是一些解决方案和注意事项: ### 设置正确的 MIME 类型和字符编码 确保在创建 `Blob` 对象时指定正确的 MIME 类型和字符编码。例如,对于文本文件(如 `.txt` 或 `.csv`),可以使用 `text/plain;charset=utf-8`;而对于 Excel 文件(`.xlsx`),则应使用 `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8`。 ```javascript const data = '测试下载文件\n' + 'wewewe\n'; const blob = new Blob([data], { type: 'text/plain;charset=utf-8' }); const url = URL.createObjectURL(blob); ``` ### 使用合适的响应头配置后端 如果后端返回的是二进制流,需要确保服务器端设置了正确的 `Content-Type` 响应头。例如,对于 Excel 文件,应该设置为 `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8`,而不是 `text/html` 或其他类型。 ```java response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); ``` ### 处理 Axios 请求时的响应类型 当使用 Axios 进行文件下载时,建议将 `responseType` 设置为 `blob`,以确保接收到的数据是二进制格式,并且能够正确地转换为 `Blob` 对象。 ```javascript this.$http.post("download", { fileName: file.filename }, { responseType: 'blob' }) .then(function(response) { let blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' }); let downloadElement = document.createElement('a'); let href = window.URL.createObjectURL(blob); downloadElement.href = href; downloadElement.download = 'xxx.xlsx'; document.body.appendChild(downloadElement); downloadElement.click(); document.body.removeChild(downloadElement); window.URL.revokeObjectURL(href); }); ``` ### 检查数据是否被错误解析 有时,在请求过程中,数据可能会被错误地解析为字符串,而不是作为原始二进制数据处理。为了避免这种情况,确保在发送请求时明确指定 `responseType: 'blob'`。 ```javascript let config = { responseType: 'blob' }; axios.get('/api/download', config).then(res => { const blob = new Blob([res.data], { type: 'application/octet-stream' }); const downloadUrl = window.URL.createObjectURL(blob); const link = document.createElement('a'); link.href = downloadUrl; link.setAttribute('download', 'filename.ext'); document.body.appendChild(link); link.click(); link.remove(); }); ``` ### 处理文件名中的中文字符 如果文件名包含中文字符,可能需要对文件名进行编码,以避免浏览器在处理下载文件名时出现乱码。 ```javascript const encodedFileName = encodeURIComponent(this.dowloadFile.file_name); const a = document.createElement("a"); a.href = url; a.download = decodeURIComponent(encodedFileName); // 避免重复编码 a.click(); ``` 通过上述方法,可以有效解决 `Blob` 下载文件时出现的乱码问题[^1]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值