详解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>
详解get请求和post请求参数中文乱码的解决办法的更多相关文章
- get请求和post请求参数中文乱码的解决办法
get请求参数中文乱码的解决办法 在tomcat的server.xml里的Connector加个URIEncoding="UTF-8",把 <Connector connec ...
- jmeter请求参数中文乱码,解决方法
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ...
- java web项目get,post请求参数中文乱码解决
[转载]原文地址:https://www.cnblogs.com/tom-plus/p/6392279.html 在开发过程中,有时候会碰到get,post请求参数中文乱码. 原因: Http请求传输 ...
- JSP中解决获取请求参数中文乱码问题
分两种情况: 1.获取访问请求参数时乱码 解决方法:构造一个新的String String user = new String(request.getParameter("user" ...
- Spring MVC的Post请求参数中文乱码的原因&处理
一.项目配置: Spring 4.4.1-RELEASE Jetty 9.3.5 JDK 1.8 Servlet 3.1.0 web.xml文件中没有配置编解码Filter 二.实际遇到的问题:客户端 ...
- postman测试请求参数中文乱码问题
用IDEA调试代码时,用postman测试请求url,发现post或者get请求中参数是中文的话,后台获取的参数是乱码, 一般两个方面 发送请求的一方:postman的问题 接受请求的一方:tomca ...
- springmvc将处理后的数据通过get方法传给页面时,可能会出现乱码。下面对于get请求中文参数出现乱码提出解决办法。
对于get请求中文参数出现乱码解决办法有两个: 1.修改tomcat配置文件(tomcat--->conf--->server.xml)添加编码与工程编码一致,如下: <Connec ...
- jmeter请求参数中文乱码及无法读取CSV文件解决办法
解决办法:参考http://blog.csdn.net/u012167045/article/details/70868306 版本:2.6 我是修改请求http请中的编码为Content encod ...
随机推荐
- 通过Performance Log确定磁盘有性能问题?
一些比较重要的performance counter: Counter Description LogicalDisk\ % Free Space 报告磁盘空间中未被分配的空间占逻辑卷中总可用空间的百 ...
- SpringBoot(四)SpringBoot中lombok使用
lombok概述 lombok简介 Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写 ...
- iframe标签的定时刷新
由于有个项目是大数据类型的,需要时时展现数据,这就出现了这个需求,页面不断刷新,这个其实很简单了,window.location.reload(); 这个就轻松搞定了,但是灵机一动,加上个控制吧,这下 ...
- Ubuntu修改密码之后无法登录
问题:Ubuntu修改密码之后无法登录,停留在登录界面,输入正确的密码之后,画面一闪又回到了登录界面. 解决:ctrl+alt_f1进入终端,输入用户名和密码,$cd /home/userXXX &a ...
- 前端Blob对二进制流数据的处理方式
var xhr = new XMLHttpRequest(); xhr.open("post", "/login/getCaptcher?t=" + Math. ...
- PHP源代码加密
加密软件(php_screw) >下载网站:http://sourceforge.net/projects/php-screw/ >描述:php文件通常以文本格式存贮在服务器端, 很容易被 ...
- nuxt 的一些报错和插件推荐
1.项目有启动报这个错误的,是因为node版本太低了,nuxt要求node版本要达到8.0.0以上 . 2.插件推荐
- 语句in
Python :in在for中: for name in names: names='1','2','3','4','5' for name in names: print(names) in no ...
- New UWP Community Toolkit - Staggered panel
概述 前面 New UWP Community Toolkit 文章中,我们对 2.2.0 版本的重要更新做了简单回顾,其中简单介绍了 Staggered panel,本篇我们结合代码详细讲解 St ...
- servlet本质
首先我们先要知道servlet是什么,这有两种解释.一是目前大多数人所说的,一个实现了servlet接口的类就可以叫作servlet.二,servlet只是一个接口.那么看起来这两点都和servlet ...