接口gbk转utf-8问题和form表单有文件和参数时后台接口的接收,

探讨在GBK编码环境下,URL中包含中文参数时出现的乱码问题,及其背后的技术原因,包括前端URL编码与Tomcat解码过程中的字节丢失现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作上遇到的,由于项目比较老,接口入参都是需要从request中拿,所以遇到两个问题:

1)所以当from表单有文件上传又有参数的时候,后台直接request.getparameter();是拿不到form表单里的参数的,所以采用如图方式拿参数:

2)但是把参数放在url里的话,由于项目是要求gbk环境下的(tomcat的url编码设置成gbk了),所以把入参放在url里的话,会产生乱码,而且这个乱码是改不了的,原因是,url链接在游览器传入tomcat的时候,中文会进行url编码(前端页面是utf-8的),编码成有%的那种形式,然后tomcat解码时,由于tomcat设置成gbk,所以tomcat会直接吧url解码成gbk的,所以接口里接收中文参数时是gbk乱码形式的,而且是转不过来的:

        // 模拟前端浏览器编码
        String url = URLEncoder.encode("中通快递", "UTF-8");
        // 模拟tomcat解码
        String tomcat = URLDecoder.decode(url, "GBK");
        // 模拟接口转码,这样是转不过来的
        String name = URLDecoder.decode(tomcat, "utf-8");

转不过来的原因是tomcat直接吧url编码转成gbk,已经丢失字节了,所以接口里怎么转也转不过来UTF-8的,字节已经丢失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值