Log4j2写入CSV for Excel无乱码

Log4j2 write to CSV for Excel without garbled characters

我正在使用 Log4j2 编写带有 UTF-8 字符集的 output.csv 文件。

输出完成后,一切正常。但是当我打开Excel-2016的output.csv时,每一个汉字都是乱码。

我注意到Excel默认打开csv时使用ANSI编码,所以很多UTF-8字符无法正确显示。 解决方案之一是自己在 output.csv 的开头添加 byte order mark (BOM)

参见:java-how-to-add-and-remove-bom-from-utf-8-file

但我希望 log4j2 可以为我做到这一点。还有更好的吗solution/workaround?

这是我的 log4j2.xml

<RollingFile 
  name="Chat-Appender" 
  fileName="${logSavePath}/output.csv"
  filePattern="${logArchivePath}/output_%d{yyyy-MM-dd}.csv">
  <CsvParameterLayout 
      delimiter="," 
      format="Excel"
      header="id,question,answer\n"
      charset="UTF-8" />
  <Policies>
    <TimeBasedTriggeringPolicy interval="1" />
  </Policies>
</RollingFile>

感谢您的帮助和建议!

如果要在文件开头有BOM,只需要在header参数开头插入即可:

<CsvParameterLayout delimiter="," 
                    format="Excel"
                    header="&#xFEFF;id,question,answer\n"
                    charset="UTF-8" />