以法语导出CSV会显示垃圾字符

时间:2014-03-18 09:42:22

标签: java opencsv

我在使用au.com.bytecode.opencsv.CSVWriter导出csv文件时遇到问题。我做了类似的事情:

File file = File.createTempFile("UserDetails_", ".csv"); CSVWriter writer = new CSVWriter(new OutputStreamWriter( new FileOutputStream(file), "UTF-8"), ',');

然后当我导出.csv文件时,它会显示法语字母的垃圾字符。[要保存在.csv中的数据是法语字符]。 但以前我做的事情是:

CSVWriter writer = new CSVWriter(new FileWriter(file));,然后它完美地显示了Windows环境中的所有法语字符,但在Prod环境[Linux]中它显示了垃圾。所以我想使用字符集UTF-8来导出文件格式。

我该如何摆脱这个问题? 请建议!! 提前谢谢!

1 个答案:

答案 0 :(得分:1)

假设:您使用Excel在Windows下打开CSV。

不幸的是,Excel在阅读UTF-8时很糟糕。即使它不是必需的,如果它使用任何UTF- *编码,Excel希望在CSV的开头有byte order mark,否则它将尝试使用Windows 1252读取它!

解决方案?呃......不要使用Excel?

无论如何,用你原来的方式:

CSVWriter writer = new CSVWriter(new FileWriter(file));

这将使用JVM的默认编码;这是Windows下的windows-1252和Linux下的UTF-8。

请注意,Apache的commons-io有BOM{Input,Output}Stream个类,可以帮助你。

另一个解决方案是(ewwww)始终使用Windows-1252进行读/写。

其他说明:如果您使用Java 7,请使用Files.newBuffered{Reader,Writer}()方法 - 以及try-with-resources语句。