详解get请求和post请求参数中⽂乱码的解决办法
⾸先出现中⽂乱码的原因是tomcat默认的编码⽅式是"ISO-8859-1",这种编码⽅式以单个字节作为⼀个字符,⽽汉字是以两个字节表⽰⼀个字符的。
⼀,get请求参数中⽂乱码的解决办法
对于get请求解决中⽂乱码有两种途径⼀种是修改tomcat默认的编码⽅式为"UTF-8"
在tomcat的l⾥把
<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 = Parameter("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 = Parameter("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>param name
          <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>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。