后台接收前台中文乱码

将tomcat   server.xml  如下配置加上URIEncoding="UTF-8":

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>

<think>嗯,用户在使用EasyExcel时遇到了后台返回流导致乱码的问题。首先,我需要理解这个问题可能的原因。根据之的引用,比如引用[1]提到服务器返回的是ZIP压缩包格式的Office档,而端可能没有正确处理这种流数据,导致显示乱码。同样,引用[2]中的端代码使用了正确的方法处理数据流,比如设置responseType为'blob',这可能是一个关键点。用户的问题可能出在以下几个方面:后端没有正确设置响应头,比如Content-Type或Content-Disposition,或者端没有以二进制流的形式接收数据,导致浏览器尝试解析为本,出现乱码。另外,可能没有使用正确的工具库处理Blob数据,比如在Vue中使用axios时,需要配置responseType为'blob'。接下来,我需要考虑解决方案。首先,检查后端的响应头是否正确设置,确保Content-Type是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,并且Content-Disposition包含filename。然后,端在请求时需要指定responseType为'blob',接收到数据后使用Blob对象和URL.createObjectURL来生成下载链接,避免直接处理本数据。另外,用户提到的EasyExcel是阿里的库,可能需要确认后端是否正确使用EasyExcel的API来写入输出流,避免中间有其他的数据处理导致流不完整。同时,端是否有编码问题,比如没有正确解码,但通常二进制流不需要解码,直接作为Blob处理即可。可能还需要考虑网络中间件,比如网关或拦截器,是否修改了响应头或内容。例如,某些安全设置可能会更改Content-Type,导致浏览器无法识别。此外,跨域请求时,服务器是否正确配置了CORS头部,允许接收二进制数据。最后,综合这些可能性,整理出步骤清晰的解决方案,涵盖后端的配置和代码示例,帮助用户逐步排查和解决问题。</think>### EasyExcel后台返回流导致乱码的解决方案 #### 1. **问题定位** 台出现乱码通常是因为: - 后端未正确设置响应头,导致浏览器将二进制流误解析为本[^1] - 端未以二进制格式接收数据流 --- #### 2. **后端关键配置** ```java // 设置响应头 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8") + ".xlsx"); // 使用EasyExcel写入流(需确保流未提关闭) EasyExcel.write(response.getOutputStream(), ExcelModel.class).sheet("Sheet1").doWrite(dataList); ``` *注意:不可在写入流调用`response.getWriter()`或操作其他输出流[^3]* --- #### 3. **端处理方案(以Vue+axios为例)** ```javascript axios({ method: 'get', url: '/export', responseType: 'blob' // 必须声明响应类型为二进制流[^2] }).then(res => { const blob = new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}); const downloadUrl = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = downloadUrl; a.download = 'filename.xlsx'; a.click(); window.URL.revokeObjectURL(downloadUrl); }); ``` --- #### 4. **常见问题排查表 | 现象 | 可能原因 | 解决方法 | |-------|---------|---------| | 下载件名为乱码 | 未使用URL编码件名 | 添加`URLEncoder.encode(filename, "UTF-8")`[^3] | | 打开件提示损坏 | 流被重复使用/提关闭 | 检查是否在流操作后调用`flush()`而非`close()` | | 浏览器直接显示乱码 | 未设置`responseType: 'blob'` | 确认端请求配置 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值