Postman中 、 是JSON合法转义,非乱码;Pretty模式渲染为换行,Raw模式显示字面量;断言应先用pm.response.json()解析再校验,避免直接匹配未解析字符串。

Postman 返回体中出现 、 等转义字符怎么看待
这些不是“乱码”,而是 JSON 序列化后合法的字符串转义表示,比如 "username": "admin2
" 中的
是换行符的 JSON 编码形式。Postman 默认以 Pretty 模式渲染 JSON,会自动把
渲染成换行;但如果你用 Raw 查看或写断言,它就是原始字符串里的两个字符:\ 和 n。
常见误判场景:
- 前端 JS
JSON.parse()后得到的是真实换行符(u000A),但你用pm.response.text()取到的是未解析的 JSON 字符串,里面仍是字面量 - 断言里写
pm.expect(jsonData.username).to.equal("admin2 ")会失败——因为 JS 字符串字面量中的是换行,而响应体里是两个字符 - 复制 Raw 响应内容时,编辑器可能隐藏了反斜杠,导致你以为字段末尾有空格或不可见字符
在 Tests 里正确提取并校验含转义字符的字段值
核心原则:先解析 JSON,再操作字段值。不要直接对 pm.response.text() 做字符串匹配(除非你明确要查字面量)。
推荐做法:
- 用
pm.response.json()获取已解析的对象,字段值是运行时真实字符串(已转为换行符) - 若需断言字段含换行,用正则或
includes(" "),例如:const jsonData = pm.response.json(); pm.test("username 包含换行", () => { pm.expect(jsonData.username).to.include(" "); }); - 若字段值本身要参与后续请求(如作为下一个接口参数),注意:URL 中不能直接传换行符,需用
encodeURIComponent()处理,否则会被截断或报错
Pre-request Script 中处理参数里的特殊字符(+、空格、/ 等)
问题根源:当参数填在 Params 标签页时,Postman 会拼到 URL query string 里,触发 URL 编码规则——+ 被当成空格,/、? 等被截断或改变语义。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
可靠解法只有两个:
- 把参数移到
Body → x-www-form-urlencoded:Postman 自动做application/x-www-form-urlencoded编码,+会变成%2B,不会变空格 - 改用
Body → raw → JSON,手动构造 JSON body,然后在 Pre-request Script 中用JSON.stringify()或encodeURIComponent()动态生成字段值,例如:const rawPayload = { query: encodeURIComponent(pm.variables.get("raw_input")) }; pm.request.body.raw = JSON.stringify(rawPayload); - 绝对避免在 Params 里传含
+、、&、=的原始值——这不是 Postman 的 bug,是 HTTP 规范行为
为什么用 form-data 也能绕过 URL 转义,但不推荐用于纯文本参数
form-data 确实不拼 URL,也不受 query string 编码影响,但它本质是 multipart 协议,每个字段会加 boundary 分隔、带 MIME 头。后端必须用 multipart 解析器才能读取,和普通 x-www-form-urlencoded 或 JSON 接口不兼容。
典型踩坑点:
- 你用
form-data发送{"token": "abc+123"},后端收到的是一个文件字段,而不是 JSON 对象 - Spring Boot 用
@RequestBody接收不到form-data的键值,必须改用@RequestParam或MultipartFile - 调试时看到 Postman 的 Body 预览显示正常,但后端日志里字段为空——大概率是 Content-Type 不匹配导致解析失败
真正需要传特殊字符时,优先选 x-www-form-urlencoded 或 raw + JSON,别为了“不转义”而引入协议错配。










