java - 通过 UTF-8 中的 Apache CSV 生成 CSV

标签 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);

接下来我设置标题

csvPrinter.printRecord(headers);

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

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

我还尝试将文件上传到在线 CSV lint validator ,它告诉我我使用的是 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);

    //...
}

关于java - 通过 UTF-8 中的 Apache CSV 生成 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57112252/

相关文章:

mysql - 使用 Rubygems 将 CSV 文件数据加载到 Mysql

java - 如何使用 Apache Commons CSV 解析以 GB18030 编码的 csv 文件

java - 未指定 header 映射,无法按名称访问记录值(Apache Commons CSV)

java - Apache CSV 解析器不适用于带引号的制表符分隔数据

java - 数据库字段验证客户端

mysql - 如何从 .csv 文件创建 Hive 表,该文件有一列,字段由分号分隔;

node.js - 使用 fast-csv 将写入附加到 csv 文件

java - 如何使用 POI 锁定 Excel 工作表中的数据,使单元格没有任何数据/工作表的其余部分未锁定

java - 从 Android 进行更好的 sqlite 查询

java - 为什么单个 EJB session bean 允许有多个接口(interface)?