java json中文转\u4f60\u597d是序列化库默认unicode转义策略,解决核心是控制序列化行为:fastjson用browsercompatible、gson禁用html转义、jackson关闭escape_non_ascii并确保utf-8编码链完整。

Java 中 JSON 传输时中文被转成 \u4f60\u597d 这类 Unicode 形式,本质是序列化库的默认安全策略——为兼容性与防注入,默认对非 ASCII 字符做 Unicode 转义。这不是错误,但影响可读性和调试。解决核心在于**控制序列化行为,而非事后解码**。
用 FastJSON 禁用中文 Unicode 转义
FastJSON 提供 SerializerFeature.BrowserCompatible,它只禁用中文等 Unicode 字符的转义,保留引号、反斜杠等必要转义,最稳妥:
- 添加依赖:
<groupid>com.alibaba</groupid><artifactid>fastjson</artifactid><version>1.2.83</version> - 序列化时显式启用该特性:
JSON.toJSONString(obj, SerializerFeature.BrowserCompatible) - 注意:不推荐使用已停更的老版本(如 1.2.6x),新版本对中文处理更稳定
用 Gson 关闭 HTML 相关转义
Gson 默认不仅转义 JSON 必需字符("、\),还会把 、<code>>、=、& 等转成 \u003c 形式,连带影响中文显示逻辑。只需关闭 HTML 转义即可:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 构建 Gson 实例时调用
.disableHtmlEscaping():Gson gson = new GsonBuilder().disableHtmlEscaping().create(); - 之后所有
gson.toJson(...)都不再对中文做 Unicode 转义 - ⚠️警告:若 JSON 会直接插入 HTML 页面(如
innerHTML),需自行过滤 XSS 风险,不能仅依赖此配置
用 Jackson 配置 UTF-8 输出并确保编码链完整
Jackson 默认不主动将中文转 Unicode,但若仍出现,大概率是编码链断裂。重点检查三处:
- 序列化器明确指定 UTF-8:
ObjectMapper mapper = new ObjectMapper();<br>mapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, false);
- HTTP 响应头必须声明:
Content-Type: application/json; charset=UTF-8 - Spring Boot 项目可在
application.yml加:spring.http.encoding.charset=UTF-8<br>spring.http.encoding.force=true
不建议的补救方式:手动解 Unicode
如果已收到 \u5f20\u4e09 这类字符串,再用正则或工具类还原,属于“逆向修复”,容易出错且掩盖根本问题:
-
String decoded = URLDecoder.decode(jsonStr, "UTF-8")对 JSON 不适用 -
UnicodeUtil.toUnicode()(Hutool)是“编码”工具,不是“解码”工具,勿混淆 - 真正需要解码时,应使用标准 JSON 解析器(如 Jackson 的
readValue),它自动完成 Unicode 还原
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










