Postman表单提交中文乱码主因是Content-Type缺失charset=UTF-8声明,导致服务端(如Tomcat旧版、未配过滤器的Spring Boot)默认用ISO-8859-1解析UTF-8字节流,使中文变为问号或空值。

Postman 表单提交中文乱码,基本就是 Content-Type 缺少 charset=UTF-8 或服务端没按 UTF-8 解析请求体。
为什么 x-www-form-urlencoded 表单会乱码
Postman 默认对 x-www-form-urlencoded 类型的 Body 不显式声明字符集。浏览器通常用 UTF-8 编码表单数据,但 Postman 若未指定,某些后端(如 Tomcat 旧版本、Spring Boot 未配过滤器)会 fallback 到 ISO-8859-1 解析 —— 这个编码根本不能表示中文,结果就是 request.getParameter("name") 返回问号或空值。
常见错误现象:张三 变成 ??、?,或直接为空;而英文数字正常。
- 检查请求头:确认
Content-Type值是application/x-www-form-urlencoded; charset=UTF-8,不是只有application/x-www-form-urlencoded - 注意写法:分号后紧接
charset=UTF-8,中间不能有空格,charset= UTF-8或charset=UTF-8都无效 - Spring Boot 用户需额外确认是否启用了
CharacterEncodingFilter(默认开启,但若自定义了 WebMvcConfigurer 可能被覆盖)
Postman 中如何手动设置表单编码
Postman 界面不提供“表单编码下拉菜单”,必须靠 Header 显式声明。Body 选 x-www-form-urlencoded 后,Header 里要主动加或改这一行:
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
别信“自动识别”——Postman 对表单类型压根不探测编码,只认 Header 声明。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 如果后端是 Java(如 Spring MVC),还建议在请求头中补上
Accept:application/json;charset=UTF-8(虽非必须,但可避免部分严格匹配逻辑降级) - 不要依赖 Pre-request Script 去动态设 Header,除非你明确知道当前环境变量已加载且值正确;优先在 Headers 标签页硬编码
- Mac 版 Postman 有个隐藏坑:系统键盘输入法切换时偶尔会触发临时编码污染,重启 Postman 可快速验证是否为此类干扰
服务端必须同步配合的点
只改 Postman 没用。服务端收到字节流后,必须用 UTF-8 解析,否则一切白搭。
- Tomcat:检查
server.xml的Connector是否含URIEncoding="UTF-8"(影响 GET 参数)和useBodyEncodingForURI="true"(影响 POST 表单) - Spring Boot:确保
spring.http.encoding.force=true(2.x 改为server.servlet.encoding.force=true),且未被其他 Filter 干扰 - Node.js/Express:需手动调用
req.setEncoding('utf8'),或使用body-parser并配置encoding: 'utf8' - PHP:确认
default_charset是UTF-8,且数据库连接也设了SET NAMES utf8mb4
快速验证是否真乱码还是假象
别急着改代码。先用 Postman 的 Raw 响应视图 + Console(View → Show Postman Console)看原始字节流:
- 如果 Raw 视图里中文显示正常,但 Preview 里是乱码 → 是 Postman 渲染问题,回头检查响应头
Content-Type是否带charset - 如果 Raw 里已经是
??或%E5%BC%A0%E4%B8%89(这是 URL 编码后的 UTF-8 字节),说明服务端解析错了 —— 它把 UTF-8 字节当 ISO-8859-1 解了 - Console 里能看到真实请求头和响应头,重点核对
Content-Type和Content-Length是否合理
最易被忽略的是:表单提交走的是 HTTP body 解析路径,和响应编码无关;很多人花半天调 response.setCharacterEncoding(),却忘了 request.setCharacterEncoding("UTF-8") 才是关键。










