当前位置: 首页 > 知识库问答 >
问题:

对来自UTF-8的输入流进行解码并写入日志文件

范豪
2023-03-14

我有xml文件,这将与UTF-8编码作为输入流到我的代码,我需要写该文件到日志文件。下面是我尝试的代码,但它不起作用,它打印所有编码的字段。

FileOutputStream streamer = new FileOutputStream(filename);
OutputStreamWriter writer = new OutputStreamWriter(streamer, "UTF-8");
InputStreamReader decodedInputStream = new InputStreamReader(this.encodedInputStream , StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(decodedInputStream);
String readLine = null;
StringBuilder builder = new StringBuilder();
try {
  while ((readLine = reader.readLine())!=null){
    builder.append(readLine);
  }
}catch(Exception e){
    log.error("Exception while logging WSCallMFE", e);
}
String result = builder.toString();
log.info(result);
%3Cprop%3E%3Cjavavendor%3ETest+Test%3C%2Fjavavendor%3E%0A%3Cdrive%3EC%3A%3C%2Fdrive

预期结果

<prop><java.vendor>Test Test</java.vendor>
<drive>C:</drive>

如果我将xml记事本文件作为输入流直接传递给this.EncodedInPutStream,那么它会给出预期的输出。你知道我如何转换整个编码文件并去掉编码字符吗?

共有1个答案

邬楚青
2023-03-14

这看起来像是用一些URL编码器编码的。在这里,您可以使用java.net中的urldecoder删除这些编码内容:

System.out.println(URLDecoder.decode("%3Cprop%3E%3Cjavavendor%3ETest+Test%3C%2Fjavavendor%3E%0A%3Cdrive%3EC%3A%3C%2Fdrive\r\n", StandardCharsets.UTF_8));

产出:

<prop><javavendor>Test Test</javavendor>
<drive>C:</drive
 类似资料:
  • 问题内容: 我真的很困惑。当我做: 它给我错误 UnicodeDecodeError:’ascii’编解码器无法解码位置0的字节0xef:序数不在范围内(128) 如果我做: 它工作正常。 问题 是为什么第一种方法会失败?以及如何插入宝? 如果第二种方法是正确的方法,那么使用的重点是什么? 问题答案: 我相信问题在于这是字节字符串,而不是Unicode字符串。我怀疑文件处理程序试图根据“我是将Un

  • 这是我的代码, 无论何时运行此代码,都会出现以下错误: UnicodeDecodeError:'utf-8'编解码器无法解码字节0xe9在位置2892:无效的延续字节 我试图解决这个问题,并在open()中添加了一个额外的参数。代码如下所示: 但它再次给出了同样的错误。那我该怎么办?

  • 问题内容: 我使用以下命令在后台运行python脚本: 但nohup似乎没有向日志文件写入任何内容。命令日志是 已创建但始终为空。在python脚本中,我使用 而不是打印到标准输出。我在做什么 有什么不对劲吗? 问题答案: 看起来你需要定期刷新stdout(例如。 ). 在我的测试中,Python甚至不会自动做到这一点 直到程序退出。

  • 我使用以下命令在后台运行python脚本: 但nohup似乎没有向日志文件写入任何内容。cmd.log已创建,但始终为空。在python脚本中,我使用而不是来打印到标准输出。我做错什么了吗?

  • 我的grails配置log4j部分中有以下内容: 文件“onetract3.log”已成功创建,但未向该文件写入任何内容。 我可以在控制台中看到信息处理正确。 Grails版本是2.3.5 知道为什么这没有写入日志文件吗? 编辑:10.03.1014,设置相加为false。

  • 问题内容: 我有一堆不是UTF-8编码的文件,我正在将网站转换为UTF-8编码。 我对要保存在utf-8中的文件使用了简单的脚本,但是文件以旧编码保存: 如何以utf-8编码保存文件? 问题答案: file_get_contents / file_put_contents不会神奇地转换编码。 您必须显式转换字符串。例如使用或。 尝试这个: 或者,使用PHP的流过滤器: