springmvc 表单中文乱码解决方案
基本上通过在 web.xml 了配置拦截器就可以解决。
这里需要注意的是,最好把这段代码放在web.xml中开头的位置,因为拦截有顺序,如果放在后面的话容易拦截不到。
拦截器代码如下
- <filter>
- <filter-name>CharacterEncodingFilterfilter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
- <init-param>
- <param-name>encodingparam-name>
- <param-value>UTF-8param-value>
- init-param>
- <init-param>
- <param-name>forceEncodingparam-name>
- <param-value>trueparam-value>
- init-param>
- filter>
- <filter-mapping>
- <filter-name>CharacterEncodingFilterfilter-name>
- <url-pattern>/*url-pattern>
- filter-mapping>
顺便再补充其他的几个可能原因。
1、数据库和数据表不是 utf-8 编码
就在前几天,我遇到的问题正是这个。当时是刚从 windows 搬到 mac。也是在提交 post 表单的时候,中文一直是乱码,后台百度发现,原来是 navicat 的原因。就是在新建 数据库连接(注意是连接),不能选择 utf-8,应该选择默认的自动。这个地方很坑人。
数据库和数据表当然是 utf-8,一般这种情况很少出错。
2、修改 Tomcat 的 server.xml 文件,添加 utf-8 编码
"8080" protocol="HTTP/1.1" - connectionTimeout="20000"
- redirectPort="8443" URIEncoding="UTF-8"
- useBodyEncodingForURI="true" />
3、注意你的 IDE (如Eclipse,IntelliJ IDEA)的 jsp 文件编码,一般在右下角可以看出来,通常我们也要把默认的编码设置为 utf-8。
4、还有一种方法就是 直接对接收到的数据编码转换,我感觉有点麻烦,所以不是很喜欢
- String name=new String((user.getUname()).getBytes("ISO-8859-1"),"utf8");
总结:一般来说,第一种拦截器方法是可用的,要注意的是要把拦截器代码放到 web.xml 头部,防止拦截不到,还有表单一定要 post 方式提交。
- 微信
- 赶快加我聊天吧
- 博客交流群
- 海纳百川,大家来水
2018年11月24日 00:20:09 1楼
xxxxx
2018年11月24日 00:20:30 2楼
11111
2018年11月24日 23:44:24 1层
@ saysky sssssss
2018年11月24日 23:44:45 2层
@ saysky2 33333
2018年11月24日 23:44:03 3楼
ssssss