美文网首页
Tomcat编码--前端传值到后台 乱码

Tomcat编码--前端传值到后台 乱码

作者: willcoder | 来源:发表于2019-08-03 09:31 被阅读0次

    情景再现:

     前段时间做个查询,查询条件在前端页面中是正常的汉字,在js中alert()出来也是正常的。但是传到后台汉字乱码了。。
    

    当时不知道是什么原因导致的,
    因为jsp页面加了编码:pageEncoding <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    后来我觉得可能是url加密了url encoding了,然后我在后台将接收的乱码字符串decoding反编码,但是还是乱码!!
    给我烦的一个头两个大,后来病急乱投医:

    BalanceErrorLogParam param;
    String str1 = JSON.toJSONString(param);
    String newStr = new String(str1.getBytes("ISO-8859-1"), "UTF-8");
    BalanceErrorLogParam param1 = JSON.parseObject(newStr, BalanceErrorLogParam.class);
    

    将接收到的实体重新编码,把认识的编码格式挨个试了一遍,发现iso-8859-1格式是对的,然后本地就这么个蠢方法放这了。
    项目发布到服务器上,测试妹子说,这个查询查不出来啊,我想肯定乱码了,,
    本地和服务器上版本都是tomcat7,只是tomcat的配置不同,缩小了范围就好办了,比对两个server.xml

    最终解决办法:

    利用request.setCharacterEncoding("UTF-8");来设置Tomcat接收请求的编码格式,只对POST方式提交的数据有效,对GET方式提交的数据无效!
    要设置GET的编码,可以修改server.xml文件中,
    相应的端口的Connector的属性:URIEncoding="UTF-8"
    这样,GET方式提交的数据才会被正确解码。

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

    这也让我知道了,tomcat7不配置URIEncoding,它的默认值是ISO-8859-1

    相关文章

      网友评论

          本文标题:Tomcat编码--前端传值到后台 乱码

          本文链接:https://www.haomeiwen.com/subject/oouzrctx.html