【发布时间】:2020-12-08 16:35:37
【问题描述】:
我正在开发一个 Java 应用程序,它接受来自用户的 .csv 文件,然后将它们读取并写入服务器上的临时文件夹以进行一些处理。这是我的一些 IO 代码:
br = new BufferedReader(new InputStreamReader(in));
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
String str;
while ((str = br.readLine()) != null) {
out.write(str);
out.newLine();
}
out.flush();
在此处调试并查看 Excel 中的输出文件时,它看起来完全符合我的预期。假设用户输入了一个 csv 文件,其中第一个单元格的值为“Foo”(无特殊字符);这一切似乎都出现在 Excel 和调试器中。但稍后,我将使用value.contains("Foo") 解析该值的输出文件。仅当 csv 文件在 Excel 中以 csv UTF-8 格式保存时才返回 false,即使根据 Excel 并且调试器值的值为“Foo”。
为什么会这样?
【问题讨论】:
-
InputStreamReader和OutputStreamWriter最好使用明确的StandardCharsets.UTF_8或Charset.defaultCharset()(这是默认值)创建。out.write("\uFEFF");在循环之前可能有助于识别 UTF-8。
标签: java excel csv encoding vaadin