zoukankan      html  css  js  c++  java
  • get方式中文参数乱码解决方法

    encodeURI(encodeURI("员工数据模板.xls"));

    解决办法:前台发送请求的时候,给中文汉字参数,进行两次编码;后台取值的时候,编码一次String fileName = URLDecoder.decode(fileName, "UTF-8");

    下面是拷贝其他文章的内容:

    首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的。

    一,get请求参数中文乱码的解决办法

    对于get请求解决中文乱码有两种途径一种是修改tomcat默认的编码方式为"UTF-8"

    在tomcat的server.xml里把

    <Connector connectionTimeout="50000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

    修改为

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

      使用这种方式带来的问题是在你本机上这么做没有问题,你无论怎么去修改你tomcat上的配置都没问题,但是测试环境和生产环境的服务器不是轻易说改就能改的,特别是有些公司的服务器是租赁的,那么在我们不知道测试环境和生产环境服务器配置的时候就要使用以下的方法来解决get请求的中文乱码问题。

    来自页面的一个get请求:

    window.location.href = getContextPath()+"/manage/user/detail?name="+encodeURI(encodeURI("小明"));

    服务器端:

    String name = request.getParameter("name");
    orgname = URLDecoder.decode(name,"UTF-8");

      因为get请求的参数在请求行上,我们不能像解决post请求那样使用 request.setCharacterEncoding("UTF-8");这种方式是修改方法体的编码方式。

    所以只能使用以上的方式分别对请求行的汉字进行编码和解码。其实解决get请求中文乱码问题最好的方式是避免使用中文,比如上面的name="小明"

    如果name是一个恒定值的话,你可以在你的程序里这样写:

    window.location.href = getContextPath()+"/manage/user/detail?name="+encodeURI(encodeURI("xiaoming"));
    public static final String NAME = "xiaoming";//定义一个常量
    
    String name = request.getParameter("name");
    
    if(name.equals(NAME)){
    
      name = "小明"
    
    }

      如果你必须传中文,而且name这个参数的值是动态的,不断变化的,建议你在数据库里面建立一张表,

    让你的中文参数的值都有一个对应的id,在请求发送前先查一下这张表。

    二,post请求参数中文乱码的解决办法

      对于post请求,请求中问乱码的两种解决办法,就喜闻乐见了。一般也不会有post请求参数中文乱码吧,认为任何一个java的web项目因该都配置了字符集过滤器吧。

    但为了这文章的完整性和以后工作学习方便,我还是把这两种方法贴上来吧。

      (1): 

    request.setCharacterEncoding("UTF-8");

      (2):

    <filter>
        <description>字符集过滤器</description>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <description>字符集编码</description>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping> 

        

      

    参考文章:https://www.cnblogs.com/cdf-opensource-007/p/6337448.html

  • 相关阅读:
    20080619 SQL SERVER 输入 NULL 的快捷键
    20090406 Adobe的“此产品的许可已停止工作”错误的解决办法
    20080908 Office Powerpoint 2007 不能输入中文的解决办法
    20080831 ClearGertrude Blog Skin 's cnblogs_code class
    20080603 Facebook 平台正式开放
    20080519 安装 Microsoft SQL Server 2000 时提示 创建挂起的文件操作
    test
    Linux—fork函数学习笔记
    SOA的设计理念
    Why BCP connects to SQL Server instance which start with account of Network Service fail?
  • 原文地址:https://www.cnblogs.com/zh-1721342390/p/9266999.html
Copyright © 2011-2022 走看看