如何通过Apache CSV在UTF-8中写入CSV文件?

我正在尝试通过以下代码生成csv,其中Files.newBufferedWriter()默认将文本编码为UTF-8,但是当我在excel中打开生成的文本时,会出现无意义的字符。

我这样创建CSVPrinter:

CSVPrinter csvPrinter = new CSVPrinter(Files.newBufferedWriter(Paths.get(filePath)), CSVFormat.EXCEL);


接下来我设置标题

csvPrinter.printRecord(headers);


然后在下一个循环中,我像这样将值打印到writer中

csvPrinter.printRecord("value1", "valu2", ...);


我还尝试将文件上传到在线CSV皮棉验证器中,它表明我使用的是ASCII-8BIT而不是UTF-8。我做错了什么?

最佳答案

Microsoft软件倾向于采用Windows-12 *或UTF-16LE字符集,除非内容以byte order mark开头,软件将使用该来识别字符集。尝试在文件开头添加字节顺序标记:

try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(filePath))) {

    writer.write('\ufeff');

    CSVPrinter csvPrinter = new CSVPrinter(writer);

    //...
}

10-04 19:02