通过 Apache CSV 以 UTF-8 生成 CSV

Den*_*nov 3 java csv apache-commons-csv

如何通过 Apache CSV 以 UTF-8 格式编写 CSV 文件?

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

我像这样创建 CSVPrinter:

CSVPrinter csvPrinter = new CSVPrinter(Files.newBufferedWriter(Paths.get(filePath)), CSVFormat.EXCEL);
Run Code Online (Sandbox Code Playgroud)

接下来我设置标题

csvPrinter.printRecord(headers);
Run Code Online (Sandbox Code Playgroud)

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

csvPrinter.printRecord("value1", "valu2", ...);
Run Code Online (Sandbox Code Playgroud)

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

VGR*_*VGR 11

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

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

    writer.write('\ufeff');

    CSVPrinter csvPrinter = new CSVPrinter(writer);

    //...
}
Run Code Online (Sandbox Code Playgroud)

  • 这也可以作为标题 `CSVFormat.EXCEL.withHeader('\ufeff' + "Name", "Age")` 完成,这样我们就可以将 `CSVPrinter` 作为 `try` 的一部分。 (3认同)