通过 java.nio 写入带有 BOM 的 UTF-8 编码的文本文件
Write a text file encoded in UTF-8 with a BOM through java.nio
我必须将数据库查询的输出写入 csv 文件。
不幸的是,我公司的很多人都不会使用像 Notepad++ 这样的好用的编辑器,并且一直用 Excel 打开 csv 文件。
当我像这样使用 java.nio
编写 text/csv 文件时
public static void main(String[] args) {
Path path = Paths.get("U:\temp\TestOutput\csv_file.csv");
List<String> lines = Arrays.asList("Übernahme", "Außendarstellung", "€", "@", "UTF-8?");
try {
Files.write(path, lines, StandardCharsets.UTF_8, StandardOpenOption.CREATE_NEW);
} catch (IOException e) {
e.printStackTrace();
}
}
文件已成功创建并以 UTF-8 编码。
现在的问题是该文件中缺少 BOM。
没有BOM(Notepad++右下角编码标签显示UTF-8)这对Notepad++来说没问题
但显然是为了 Excel
当我使用 Notepad++ 的选项 Encoding > Convert to UTF-8-BOM 时,保存并关闭它,然后在 Excel 中打开文件,它正确显示所有的值,没有留下任何编码问题。
这导致了以下问题:
我可以在使用 StandardCharsets.UTF-8
时强制 java.nio.file.Files.write(...)
添加 BOM 还是 java.nio
中有任何其他方法来实现所需的编码?
据我所知,在标准 Java NIO 库中没有直接的方法以 BOM 格式编写 UTF-8 文本文件。
但这不是问题,因为 BOM 只是文本流开头的一个特殊字符,表示为 \uFEFF
。只需手动将其添加到 CSV 文件中,f.e.:
List<String> lines =
Arrays.asList("\uFEFF" + "Übernahme", "Außendarstellung", "€", "@", "UTF-8?");
...
我必须将数据库查询的输出写入 csv 文件。
不幸的是,我公司的很多人都不会使用像 Notepad++ 这样的好用的编辑器,并且一直用 Excel 打开 csv 文件。
当我像这样使用 java.nio
编写 text/csv 文件时
public static void main(String[] args) {
Path path = Paths.get("U:\temp\TestOutput\csv_file.csv");
List<String> lines = Arrays.asList("Übernahme", "Außendarstellung", "€", "@", "UTF-8?");
try {
Files.write(path, lines, StandardCharsets.UTF_8, StandardOpenOption.CREATE_NEW);
} catch (IOException e) {
e.printStackTrace();
}
}
文件已成功创建并以 UTF-8 编码。
现在的问题是该文件中缺少 BOM。
没有BOM(Notepad++右下角编码标签显示UTF-8)这对Notepad++来说没问题
但显然是为了 Excel
当我使用 Notepad++ 的选项 Encoding > Convert to UTF-8-BOM 时,保存并关闭它,然后在 Excel 中打开文件,它正确显示所有的值,没有留下任何编码问题。
这导致了以下问题:
我可以在使用 StandardCharsets.UTF-8
时强制 java.nio.file.Files.write(...)
添加 BOM 还是 java.nio
中有任何其他方法来实现所需的编码?
据我所知,在标准 Java NIO 库中没有直接的方法以 BOM 格式编写 UTF-8 文本文件。
但这不是问题,因为 BOM 只是文本流开头的一个特殊字符,表示为 \uFEFF
。只需手动将其添加到 CSV 文件中,f.e.:
List<String> lines =
Arrays.asList("\uFEFF" + "Übernahme", "Außendarstellung", "€", "@", "UTF-8?");
...