最近开发导出报表要求导出csv格式,但是发现导出后用excel打开乱码。用notepad++打开发现编码格式是utf-8无bom格式,但是文件实际的数据后面有一行很长很长的null。经过debug也没发现生成的临时文件有乱码,最后将错误锁定在文件下载这一块。
原来的代码:
FileInputStream fis = new FileInputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[2048];
while(( fis.read(buffer) != -1){
bos.write(buffer);
}
用notepad++打开看到的后面一长串的null是由于byte数组没用完导致的。excel默认采用的编码格式会把后面没用到的数组编码成别的字符,所以导致了乱码,虽然这个可以通过用记事本打开在存成ANSI格式或者在notepad++直接删除掉后面的null解决。但这并不是长久之计。目前我所想到的解决办法是讲后面的没用到的数组不要。只需要通过修改代码就能实现。
修改后的代码:
byte[] buffer = new byte[2048];
int readlength = 0;
while((readlength = fis.read(buffer)) != -1){
bos.write(buffer,0,readlength);
}
之后我还会日常更新bug修复。。。。。