统一编码处理
Web应用全链路统一编码,避免各环节编码不一致导致乱码。
全链路编码配置
XML
浏览器 → 服务器 → 数据库 → 响应 → 浏览器
↓ ↓ ↓ ↓ ↓
UTF-8 UTF-8 UTF-8 UTF-8 UTF-8
请求编码
POST请求
XML
<!-- web.xml配置编码过滤器 -->
<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>
GET请求
Java
<!-- Tomcat server.xml -->
<Connector port="8080" protocol="HTTP/1.1"
URIEncoding="UTF-8"
connectionTimeout="20000" />
响应编码
SpringMVC配置
jsp
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON_UTF8);
}
}
JSP页面
HTML
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
HTML页面
SQL
<meta charset="UTF-8">
数据库编码
MySQL配置
properties
-- 创建数据库
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 创建表
CREATE TABLE user (
id INT,
name VARCHAR(100) CHARACTER SET utf8mb4
) CHARACTER SET utf8mb4;
JDBC连接
XML
jdbc.url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai
文件编码
IDEA设置
- File Encoding:UTF-8
- Project Encoding:UTF-8
- Properties Files:UTF-8
Maven配置
Java
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
JSON编码
Controller返回JSON
text
@RestController
public class ApiController {
@GetMapping(value = "/data", produces = "application/json;charset=UTF-8")
public Map<String, Object> getData() {
Map<String, Object> result = new HashMap<>();
result.put("name", "张三");
return result;
}
}
编码检查清单
| 位置 | 配置项 | 值 |
|---|---|---|
| Tomcat | URIEncoding | UTF-8 |
| web.xml | encoding | UTF-8 |
| JSP | contentType | UTF-8 |
| JDBC | characterEncoding | UTF-8 |
| IDE | File Encoding | UTF-8 |
全链路统一UTF-8编码,是解决乱码的根本方案。
要点总结
- Tomcat URIEncoding:解决GET请求乱码
- CharacterEncodingFilter:解决POST请求乱码
- contentType charset:解决响应乱码
- JDBC characterEncoding:解决数据库乱码
- IDE和项目编码:解决源码乱码
📝 发现内容有误?点击此处直接编辑