首先出现中文乱码的缘由是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节做为一个字符,而汉字是以两个字节表示一个字符的。前端
对于get请求解决中文乱码有两种途径java
一种是修改tomcat默认的编码方式为"UTF-8"web
在tomcat的server.xml里把spring
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>tomcat
修改成服务器
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>app
另外一种则是代码层次解决中文乱码,该方式须要前端与后台都要作相应编码post
来自页面的一个get请求:编码
window.location.href = getContextPath()+"/manage/user/detail?name="+encodeURI(encodeURI("小明"));url
服务器端:
String name = request.getParameter("name");
orgname = URLDecoder.decode(name,"UTF-8");
由于get请求的参数在请求行上,咱们不能像解决post请求那样使用 request.setCharacterEncoding("UTF-8");这种方式是修改方法体的编码方式。
因此只能使用以上的方式分别对请求行的汉字进行编码和解码。其实解决get请求中文乱码问题最好的方式是避免使用中文,若带有中文参数尽可能使用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>