您的位置:首页 > 理论基础 > 计算机网络

springmvc 处理http get/post请求中文乱码的问题

2016-10-18 00:00 756 查看
web.xml中的编码设置

<filter>
<filter-name>CharacterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

但这个设置是针对POST请求的,tomacat对GET和POST请求处理方式是不同的,要处理针对GET请求的编码问题,则需要改tomcat的server.xml配置文件,如下:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

改为:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>

最关键的点在这里:如果你是更改的tomcat安装目录的server.xml配置文件,那么在用eclipse运行项目时会发现配置没起作用,其实是因为eclipse在运行项目时是用的eclipse中配置的tomcat,那么问题就好解决了,打开eclipse中的tomcat配置文件,如下,修改即可。





注:配置useBodyEncodingForURI="true"后,可以解决普通get请求的中文乱码问题,但是对于通过ajax发起的get请求中文依然会乱码,请把useBodyEncodingForURI="true"改为URIEncoding="UTF-8"即可。

这些配置好了之后,你可能发现入库后表里的中文字段还是乱码(以mysql为例):

1、首先保证表本身的编码格式为UTF-8

如:CREATE TABLE `osf_photos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`key` varchar(45) NOT NULL,
`album_id` int(11) NOT NULL,
`ts` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`desc` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

2、spring在配置数据库连接时,对jdbc.url的尾部添加useUnicode=true&characterEncoding=utf-8

如:jdbc.url=jdbc:mysql://localhost:3306/osf?useUnicode=true&characterEncoding=utf-8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: