Java Web 中文乱码解决统一记录
JavaWeb 开发遇到各种中文乱码,现统一整理出相应的解决方法。
前提要求是项目工程统一使用UTF-8
编码。
JSP页面统一UTF-8
编码
1 | //指定jsp编译成 Servlet 时使用UTF-8编码 |
get
提交数据,Java 代码添加对中文的字符转码
1 | String name = new String(req.getParameter("name").getBytes("iso-8859-1"), "utf-8"); |
web.xml
添加编码过滤器,对POST
提交有效
1 | <filter> |
编码过滤器相当于设置request
和response
的编码:
1 | req.setCharacterEncoding("utf-8"); |
Tomcat配置文件server.xml
设置UTF-8
对URI进行UTF-8编码
,对GET
提交有效。
在Connector
标签增加URIEncoding="UTF-8"
设置。
1 | <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"/>` |
springmvc.xml
添加消息转换器,指定编码格式
SpringMVC使用@ResponseBody
返回的String
消息中含有中文显示乱码
1 | <!-- 注解驱动 --> |
URL带参重定向中文乱码
- SpringMVC 在 Controller 之间带有模型封装的参数进行重定向,参数包含中文。
- 参数会拼接在重定向的
URL
上(get带参请求),但是URL
的中文会乱码,页面中文显示乱码。
解决:添加编码过滤器,UTF-8
编码,解决URL
乱码;在目标Controller 方法里将将传递的中文参数取出进行iso-8859-1
转UTF-8
,再把转码后的中文参数用model
封装。
中文写入数据库乱码
- 数据库和表及字段设置
utf-8
。 - 数据库连接设置编码:
jdbc:mysql://localhost:3306/anqi_test2?characterEncoding=utf-8&allowMultiQueries=true
SpringMVC国际化中文乱码
Spring MVC国际化时,从语言资源文件读取中文显示会乱码, 解决步骤如下:
- JSP文件统一
UTF-8
编码。 properties
文件统一UTF-8
编码。- 在
springmvc.xml
文件配置ResourceBundleMessageSource
时,添加支持中文的编码。实际是统一编码格式。1
2
3
4
5
6
7
8<!-- 国际化 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 国际化资源文件名 -->
<property name="basenames" value="message"></property>
<!-- 支持UTF-8的中文 -->
<property name="cacheSeconds" value="0"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
[参考]http://blog.csdn.net/fancylovejava/article/details/7700683
Java Web 中文乱码解决统一记录
http://blog.gxitsky.com/2018/01/03/JavaWeb-zh-cn-displayed-other-characters/