UTF-8
为了防止乱码,我们规定:所有的字符集都用 UTF-8
。
IDEA Encoding
, Project Encoding
, Properties Encoding
都使用 UTF-8,这样 IDEA 里创建的文件都是 UTF-8 编码的,创建 Project 的时候已经设置过了。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
</head>
前台网页的 GET 请求以 UTF-8 来解析,pom.xml
里设置 uriEncoding
<!-- Web Server Tomcat -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${tomcat.version}</version>
<configuration>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding> <!--处理 GET 的中文-->
</configuration>
</plugin>
前台网页的 POST 请求以 UTF-8 来解析,web.xml
加上字符集的 filter 处理 POST 的中文
<!-- 处理 POST 的中文 -->
<filter>
<filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在配置 Freemarker 的时候已经设置过了。
<property name="contentType" value="text/html; charset=UTF-8"/>
由处理 @ResponseBody
返回字符串的 MessageConverter 的编码设置造成的,配置 spring-mvc.xml
中的 MessageConverter(去掉 mvc:annotation-driven/)
<!-- 默认的注解映射支持 -->
<!--<mvc:annotation-driven/>-->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
创建数据库的时候,选择 Encoding 为 UTF-8
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
在 Tomcat 启动文件 catalina.sh
中加一个 -Dfile.encoding=UTF-8
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
在 Tomcat 启动文件 catalina.bat
中加一个 -Dfile.encoding=UTF-8
set "JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8"