zoukankan      html  css  js  c++  java
  • 乱码问题


    针对Post方式提交的请求如果出现乱码,可以每次在request解析数据时设置编码格式:request.setCharacterEncoding("utf-8");

    也可以使用编码过滤器来解决,最常用的方法是使用spring提供的编码过滤器:在Web.xml中增加如下配置(要注意的是它的位置一定要是第一个执行的过滤器)

                      <!-- 解决easyUI提交表单乱码问题20160818 -->
      <filter>  
        <filter-name>characterEncodingFilter</filter-name>  
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>  
        <init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>characterEncodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>

    针对Get方式的乱码问题, 

    post请求和get请求存放参数位置是不同的:

    post方式参数存放在请求数据包的消息体中。get方式参数存放在请求数据包的请求行的URI字段中,以?开始以param=value&parame2=value2的形式附加在URI字段之后。而request.setCharacterEncoding(charset); 只对消息体中的数据起作用,对于URI字段中的参数不起作用。

    此时可以在每次发生请求之前对URL进行编码:例如:Location.href="/encodeURI"("http://localhost/test/s?name=中文&sex=女");

    当然也有更简便的方法,那就是在服务器端配置URL编码格式:

    修改tomcat的配置文件server.xml:
                 <Connector URIEncoding="UTF-8" port="8080"   maxHttpHeaderSize="8192"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"connectionTimeout="20000" disableUploadTimeout="true" />

    只需增加 URIEncoding="UTF-8"  这一句,然后重启tomcat即可。 

    对于表单提交数据默认是使用get方式,一般指定method="post"  这时乱码的解决就可以在web.xml中配置即可。

     
    post方式
    params['city']=bmCity         ---前台js
    new String(value.trim().getBytes("ISO-8859-1"),"UTF-8")   ---后台controller
     
     
    url方式:
    encodeURI(bmCity,"UTF-8");        ---前台js 编码
    new String(bmCity.trim().getBytes("ISO-8859-1"),"UTF-8")   ---后台controller 解码
     
    encodeURI(encodeURI(Url+"&type=3&gs_code="+id_gs_code+"&segment_id="+id_segment_id+"&tmall_code="+id_tmall_code+"&msg="+msg)),  
    String msgStr= java.net.URLDecoder.decode(request.getParameter("msg"),"UTF-8");      
     
    两个页面之间中文传参数乱码:
    '&lockers_name='+encodeURI(selectRow.lockers_name)+
    var id_lockers_name=decodeURI($$.QueryString("lockers_name"));
     
    //导出excel
    String as = "导出快递柜基本信息表_"+DateUtils.getDate(new Date());
    String fileName = new String(as.getBytes("GB2312"), "ISO_8859_1");
     

    经验:1:如果中文返回出现??字符,这表明没有加response.setCharacterEncoding("UTF-8");这句话。      

           2:如果返回的中文是“烇湫”这种乱码,说明浏览器的解析问题,应该检查下是否忘加response.setHeader("Content-type", "text/html;charset=UTF-8");这句话。

    //这句话的意思,是让浏览器用utf8来解析返回的数据  
    response.setHeader("Content-type", "text/html;charset=UTF-8");  
    //这句话的意思,是告诉servlet用UTF-8转码,而不是用默认的ISO8859  
    response.setCharacterEncoding("UTF-8");  
    

    request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。
    response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。

     


     
     
     
     
     
  • 相关阅读:
    C# Linq Enumerable 技巧
    Winform 踩坑
    BootStrap Table
    java8+junit5实现并发测试(多线程)
    Junit5+REST-assured 做接口测试
    log4j的使用
    ASP.NET项目启用SSL
    hyper-v虚拟机内存占用过高
    C#使用qq邮箱的smtp服务发邮件
    CALayer设置圆角
  • 原文地址:https://www.cnblogs.com/zlxbk/p/7346153.html
Copyright © 2011-2022 走看看