有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java解码来自UTF8的输入流并将其写入日志文件

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

将编码的输入流作为

FileOutputStream streamer = new FileOutputStream(filename);
OutputStreamWriter writer = new OutputStreamWriter(streamer, "UTF-8");

writer输出流作为输入以下代码。encodedInputStream

代码

    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){
readLine = URLDecoder.decode(readLine, "UTF-8");
        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) 个答案

  1. # 1 楼答案

    这看起来像是用一些URL Encoder编码的。在这里,您可以使用来自java.net^{}删除这些编码内容:

    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