utf-8保存的csv格式文件要让Excel正常打开的话,必须加入在文件最前面加入BOM(Byte order )。如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
所以在write文件的内容数据之前,先write一下BOM。 用FileOutputStream类,才能保证EF BB BF 正确传送。
FileOutputStream fos = new FileOutputStream(new File(this.csvFileAbsolutePath));
byte [] bs = { (byte)0xEF, (byte)0xBB, (byte)0xBF}; //new added
fos.write(bs);
fos.close();
这样添加了BOM的CSV文件用excel直接打开,是不会出现乱码的。
我当时遇到的问题是这样的。从公司日文版网站上下载CSV文件,用excel打开,日文乱码,用notepad++和 记事本打开,显示正常; 另外用记事本另存为“UTF-8”,再用excel打开是不乱码的。 查资料发现是excel不能识别无BOM头的unicode文件问题,就是excel在打开CSV文件时默认用ASNI打开。 所以需要添加BOM头。