You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中JSON转JsonObject出现特殊字符问题及排查咨询

排查JSON转JsonObject后的乱码问题

  1. 移除冗余的编码转换操作
    你当前代码里把String转字节再转回String的操作完全多余,反而会破坏原有编码。直接用原始mm字符串传给Gson解析即可:

    private JsonObject getCon(String mm) {
        return new GsonBuilder().create().fromJson(mm, JsonObject.class)
                .getAsJsonObject("dict").getAsJsonObject("con"); 
    }
    

    String本身已是Unicode字符序列,额外的字节转换只会引入编码不匹配问题,这是乱码的核心诱因之一。

  2. 校验原始响应的编码与内容
    仅部分description字段出问题,说明原始JSON响应的编码可能非UTF-8,或传输中被篡改。可以直接打印mm的原始内容,或输出mm.getBytes()的字节数组,对比正常字符串Post Approval - Completed, Post Approval - Pending的UTF-8字节序列,看差异点——比如正常短横线-的UTF-8字节为0x2D,若原始字节是其他值,说明编码不匹配。

  3. 检查响应获取阶段的编码设置
    确认mm的来源:如果是HTTP响应,要确保请求时指定Accept-Charset: UTF-8,读取响应流时用InputStreamReader(inputStream, StandardCharsets.UTF_8)而非默认编码;如果是文件读取,同样要明确指定UTF-8编码打开文件。

  4. 排查特殊字符的真实类型
    部分字段异常可能是因为包含非ASCII特殊字符(比如全角短横线、软连字符),而编码解析不匹配。可以用Character.codePointAt(mm, 异常位置)查看乱码处的字符编码,确认是否为特殊字符导致的解析异常。

  5. 改用Gson直接流解析方式
    如果mm来自输入流,跳过字符串转换步骤,直接用流解析避免编码损耗:

    private JsonObject getCon(InputStream inputStream) {
        return new GsonBuilder().create().fromJson(new InputStreamReader(inputStream, StandardCharsets.UTF_8), JsonObject.class)
                .getAsJsonObject("dict").getAsJsonObject("con"); 
    }
    

内容的提问来源于stack exchange,提问作者nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:27:07