URI经过GB2312编码后导致中文乱码

场景:
在这里插入图片描述
描述:
客户端默认编码为GB2312,服务端默认编码方式为UTF-8。客户端请求服务端,参数有中文。在实际请求过程中,客户端将中文“你好”编码为“%C4%E3%BA%C3”,服务端接收到会按照UTF-8格式进行解码,导致解码失败,得到的中文为一堆乱码。
原因分析:客户端和服务端两者编码方式不一致。
解决方法:
1、客户端、服务端两者统一的编码,如UTF-8。如何在tomcat、jetty中设置默认编码可自行百度。(jetty设置可能会有坑)
2、重点!!!!由于我的客户端是华为IVR,默认编码为GB2312,最重要的无法修改编码,那就只能从服务端入手了。其中遇到几个坑:
a.服务端默认编码不变,保持UTF-8,以request.getParameter(“session.sce.callid”);的方式获取参数,再通过字符编码GB2312各种转换。结果是失败!!!原因在于:request.getParameter(“session.sce.callid”);获取的参数已经是一段无法是别的乱码了!!!
b.修改jetty或tomcat默认编码格式,tomcat在web.xml中修改成GB2312后成功,jetty修改,死活不行,放弃!!!

最终解决方案:

在服务端获取最原始的参数,而非request.getParameter(“session.sce.callid”)。上面的例子最原始的参数是session.sce.callid=%C4%E3%BA%C3&,java里通过request.getQueryString();可以获得。在将字符用URLDecoder进行解码,URLDecoder.decode(queryString)。参考以下代码:

	HttpServletRequest request = ServletActionContext.getRequest();
	String queryString= request.getQueryString();
	System.out.println(queryString);
	
	String decodeString = URLDecoder.decode(queryString);
	System.out.println(decodeString);
	
	String[] params = d
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值