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

UTF-8编码XML输入流写入日志出现转义字符如何解决

问题分析与解决方案

问题根源

  • 当前处理逻辑为按行读取后逐行URL解码,但编码后的内容中换行符是以%0A形式存在的,并非原生换行符。BufferedReader.readLine()只会识别原生\n/\r\n作为行分隔符,导致读取到的单行内容包含大量未拆分的编码字符,逐行解码无法正确处理全量编码内容。
  • 直接传入XML记事本文件时,内容本身未经过URL编码,不需要解码步骤,因此可以正常输出。

修复代码

调整逻辑为:先读取输入流的全部内容为完整的编码字符串,再统一做URL解码,不要按行处理:

import java.nio.charset.StandardCharsets;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import java.util.stream.Collectors;

// 读取完整输入流内容为编码字符串
BufferedReader reader = new BufferedReader(new InputStreamReader(this.encodedInputStream, StandardCharsets.UTF_8));
String encodedContent = reader.lines().collect(Collectors.joining("\n"));
String result = "";
try {
    // 对全量内容统一做URL解码
    result = URLDecoder.decode(encodedContent, StandardCharsets.UTF_8.name());
} catch (Exception e) {
    log.error("Exception while logging WSCallMFE", e);
}
log.info(result);

补充说明

  • 若输入流来自HTTP传输等场景,需确认发送端逻辑为「先对XML内容做URL编码,再写入流」,保证编解码逻辑对齐。
  • 编解码统一使用StandardCharsets.UTF_8指定字符集,避免不同环境默认编码不一致引发的乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:57:02