今天碰到一件很奇葩的事情,在java层写入文件txt,生成.csv 在txt看没问题(带有中文),用excel看就全乱码了。。
经过一系列的排查发现一个用win32下txt的另存为utf——8格式在excel中打开就正常了。 觉的不可思议,因为我java层写入就是按utf-8编码读取写入的。
这边要说下,java本身是unicode 的string格式,需要转utf-8好。
解决方法:
因为excel读取会需要一个头叫bom,通过这里面的规定格式去判断用什么方式读取其中utf的bom为0XEF 0XBB 0XBF,那这样,我们在写入文件的时候就需要在开始处写入上面三个byte就正常显示了。。然后用二进制文本看,正常写入成功,在excel中就打开正常了。
插入的代码如下:
RandomAccessFile accessFile;
try {
accessFile = new RandomAccessFile(fileName, "rw");
long length = accessFile.length();
if(length==0){
final byte[] bom = new byte[] { (byte)0xEF, (byte)0xBB, (byte)0xBF };
accessFile.write(bom);
length+=3;
}
accessFile.seek(length);
然后就可以开始往里写东西了,中文也是正常的了。