• JAVA GET 根除请求乱码问题


    页面为UTF-8,jQuery的ajax方法为utf-8传值,中文会出现乱码,给Java页面传值时需要进行两次转码encodeURI();

    例如:

    $.post("page.do",{str:encodeURI(encodeURI("中文"))},function(data){alert(data);})

    程序页面解析字符串时需要使用ava.NET.URLDecoder.decode进行解码

    例如:

    String str= java.Net.URLDecoder.decode(ServletActionContext.getRequest().getParameter("str"), "UTF-8");


    以上是治标不治本,需要根除的话,需要修改TOMCAT的默认编码。

    我们通过 post 方法提交的参数实际上都是通过 uri 提交的,都由这个参数管理,如果没有设定这个参数,则 tomcat 将使用默认的 iso8859-1 对客户端的内容进行编码。

    useBodyEncodingForURI 使用与 Body 一样的编码来处理 URI, 这个设定是为了与 tomcat4保持兼容。在 tomcat5 中,对post 的处理通过 前面的 URIEncoding 进行处理,对get 的内容依然通过 request.setCharacterEncoding 处理,为了保持兼容,就有了这个设定。 
    将 useBodyEncodingForURI 设定为真后,就可以通过 request.setCharacterEncoding 直接解决 get 和 post 中的乱码问题。 
    这样,我们可以通过在 server.xml 中设定 URIEncoding 来解决 get 方法中的参数问题,使用过滤器来解决 post 方法中的问题。 
    或者也可以通过在 server.xml 中设定 useBodyEncodingForURI 为 true ,配合过滤器来解决编码的问题。 
    在这里,我强烈建议在网站的创作过程中,全程使用 utf-8 编码来彻底解决乱码问题。

    TOMCAT中的server.xml中的
    Connector中添加两个设置useBodyEncodingForURI="true" //设置POST和GET使用相同编码
    URIEncoding="UTF-8" //对URI使用utf-8编码处理
     
    <Connector useBodyEncodingForURI="true" URIEncoding="UTF-8" connectionTimeout="20000" maxThreads="150" port="8888" protocol="HTTP/1.1" redirectPort="8443"/>
  • 相关阅读:
    install source mysql 5.7.9
    直接复制php的安装目录部署到其他服务器的时候,无法运行
    对硬盘进行分区时,GPT和MBR有什么区别?
    centos添加永久静态路由
    Windows2008R2安装远程桌面终端授权
    nginx搭建的cdn服务器的nginx.conf配置文件
    centos6.6配置vlan三层交换
    ESXI 6.0 嵌套虚拟化 Hyper-v
    VLAN的Hybrid和Trunk端口有何区别
    如何添加使用博客RSS订阅
  • 原文地址:https://www.cnblogs.com/xiaohuBlog/p/6532552.html
Copyright © 2020-2023  润新知