详解get请求和post请求参数中文乱码的解决办法

首先出现中文乱码的原因是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>

    

  

    

时间: 2024-10-27 05:06:24

详解get请求和post请求参数中文乱码的解决办法的相关文章

get请求和post请求参数中文乱码的解决办法

get请求参数中文乱码的解决办法 在tomcat的server.xml里的Connector加个URIEncoding="UTF-8",把 <Connector connectionTimeout="50000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 改为 <Connector connectionTimeout=&qu

使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ①定义一个类,实现被装饰对象的接口 ②定义一个成员变量,记住被装饰对象的引用 ③定义构造方法,传入被装饰对象的实例 ④改写要修改的方法 ⑤不需要改写的方法,调用被装饰对象的原来的方法 (2)什么时候使用装饰设计模式 当我们需要对一个类进行增强的时候,增强后的类不再当前类的范畴 例如:现在有一个     Animal类     Cat和Dog都属于动物类

springmvc提供的解决post/get请求参数中文乱码问题

<!--springmvc提供的解决post/get请求参数中文乱码问题--><filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</p

JS传递中文参数出现乱码的解决办法

一.window.open() 乱码: JS中使用window.open("url?param="+paramvalue)传递参数出现乱码,提交的时候,客户端浏览器URL中显示参数是正确的, 但是传到了服务器端是是乱码.这种情况下需要在客户端对该参数进行编码,然后在服务器端解码即可. 1.JS客户端编码: var selStr=document.getElementsByName('selStr')[0].value; selStr=encodeURI(encodeURI(selStr

黑马day04 表单请求参数&amp;中文乱码分析

实验: 1.获取post以及get请求方式的参数 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>param.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"

【Git使用详解】Egit使用过程中遇到的问题及解决办法

1.   Git错误non-fast-forward后的冲突解决 问题(Non-fast-forward)的出现原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去.于是你有2个选择方式: 1.强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容 git push –f 如果你用的是Egit则可以在推送界面选择"Force Update All Specs"即可,如下图: 2.先把git的东西fetch到你本地然后merge后再push $ git fet

jmeter请求参数中文乱码及无法读取CSV文件解决办法

解决办法:参考http://blog.csdn.net/u012167045/article/details/70868306 版本:2.6 我是修改请求http请中的编码为Content encoding :utf-8 就正常了. 无法读取CSV文件: 可能是windows下路径有问题,在CSV Data Set Config 中filename修改为:E:\\edulogin.csv

关于HttpClient的学习心得,请求参数中文乱码问题

最近调用了一个第三方接口,接口文档限定是 HTTPS post 请求 参数是 json格式.然后随便在网上找了一份HttpClient的工具代码,然后直接调用post的请求,参数也觉得没有问题,返回值也正常,但是后来发现参数中的中文全部变成了问号传递过去了,后来发现是参数传递时编码没有指定,现记录下来以供以后学习查看,有遇到和我一样问题的初学者可以减少差询问题的时间. 代码如下: HttpClient httpClient = null; HttpPost httpPost = null; St

jsp或Action获取请求参数中文乱码

普通情况下,中文字符会被自动转换成iso-8859-1的编码格式通过网络传输,而这种格式是没办法直接表示出我们认识的中文字符的,所以还要手动将他转换回之前的字符集. 一般在servlet或者action之前加一个字符过滤器就可以解决这个问题了. 看一下jsp页面的编码,如果是utf-8就写成下面的这样获取参数就可以了,如果是其他编码就替换下面 "utf-8"成实际编码:String username = new String(request.getParameter("tPa