请求头或者响应头中文乱码问题

在http中响应头的编码只能是ISO编码或者ASCII码,但是在文件上传或者下载中在请求头中一般会把文件名写入进去,如果文件名是中文则会乱码。

在spring的配置文件中我为tomcat加了url的编码规则为utf-8并把http的字符集也设置成utf-8可是还是乱码,后面通过了解http的编码发现tomcat不支持ISO和ASCII码以外的编码设置成的响应头或者请求头。如果是这两种编码以外的格式则会报错无效参数
 

.IllegalArgumentException: The Unicode character [中] at code point [35,828] cannot be encoded as it is outside the permitted range of 0 to 255

我开始的尝试如下设置全局的编码规则

server:
  servlet:
    encoding:
      charset: utf-8
      enabled: true
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8

这个配置对请求头或者响应头的乱码并没有帮助不过可以设置全局的编码方式。

解决方式

String fileName = "中文名.file"
// 错误方式
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
// 正常做法 使用URL编码工具对字符编码,前端在进行解码
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName) + "\";charset=utf-8");

使用URLEncoder.encode(fileName)方式浏览器浏览器访问会自动解码,以下就是响应头或者请求头乱码的完美解决方式。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值