【问题标题】:write UTF-8 BOM with supercsv使用 supercsv 编写 UTF-8 BOM
【发布时间】:2015-11-11 08:48:15
【问题描述】:

我正在使用 supercscv 编写一个 utf-8 编码的 csv。 它会生成一个普通文件,但 excel 无法将其识别为 utf-8,因为它很笨,没有 bom 标记的 excel 会丢失,因此使用 excel 打开时任何特殊字符都会损坏。

有没有办法使用带有 supercsv 的 BOM 将文件写入为 UTF-8 ? 没找到。

谢谢

【问题讨论】:

    标签: java csv utf-8 byte-order-mark supercsv


    【解决方案1】:

    因为 supercsv 可能包装了一个 Writer:

    Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8);
    writer.write('\uFEFF'); // BOM for UTF-*
    ... new BeanWriter(writer, CsvPreference.STANDARD_PREFERENCE);
    

    【讨论】:

    • 谢谢@JoopEggen,这就是我要找的。这就是它的样子:OutputStreamWriter o = new OutputStreamWriter(out); // BOM o.write('\uFEFF'); writer = new CsvBeanWriter(o, CsvPreference.EXCEL_NORTH_EUROPE_PREFERENCE);
    • @allaf 最好将 UTF-8 添加到新的 OutputStreamWriter 调用中,否则使用默认平台编码 - 这是不可移植的。
    • 太棒了,节省了我的时间!
    【解决方案2】:

    根据我的经验,MS Excel 总是以默认的 MS Office 字符集打开 csv 文件。就我而言,它始终是 Windows 1252(西班牙),即使不是 Windows 机器(OSX 的 MS Office)。处理它的唯一方法是使用此字符集编写 CSV 文件。

    byte[] csvFileBytes = dataObject.toCSVString().getBytes(Charset.forName("Windows-1252"));
    

    MS Excel 似乎从不使用其他字符集来打开 CSV 文件。你可以查看这个帖子:Is it possible to force Excel recognize UTF-8 CSV files automatically?

    【讨论】:

    • 这不是真的;如果文件中存在 BOM,则 Excel 将以正确的编码打开文件。不过,默认情况下它不支持 UTF-8 是一个谜。
    • 确定吗? MS Excel 解释文件 BOM?
    • 是的,我确定;尝试上面的答案,即在文件中写入任何其他内容之前先编写 BOM
    • 好吧,我尝试在适用于 Mac 和 Windows(西班牙语版本)的 MS Office 2011 上将 CVS 文件与 BOM 一起使用,但无法正常工作。这就是为什么我必须在 Windows 1252 中对其进行编码。
    • 请 fge,你能帮我知道为什么这段代码不能用于在 csv 文件中编写 BOM 吗?字符串文件名 = "a.csv";文件文件 = FileUtils.getFile(fileName); FileWriter fw = new FileWriter(file); char[] cbuf = { 0xef, 0xbb, 0xbf };// BOM fw.write(cbuf); fw.write("aaaa;eé;cccÇÇÇ;\niií;oóó;uuúúü"); fw.flush(); fw.close();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 2020-05-08
    • 2018-10-02
    相关资源
    最近更新 更多