您的位置:首页 > 其它

解决unix(ubuntu)平台下,导出csv文件的乱码问题

2014-05-28 15:06 567 查看
项目中用到了csv导出的功能,(项目从页面到ide环境和数据库环境都是用的utf-8的编码集)但是在本地(win7)环境下开发时,无论字符编码设置成什么,用excel打开都没有乱码。但部署到ubuntu后发现,导出的csv文件用ultra-edit打开没有问题,但用excel打开就会乱码。解决办法如下:

1.导出的csv文件要加上BOM

CsvWriter writer = new CsvWriter(outputwriter, ',');
writer.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }));


2.文件的输出流也要加上字符集

resOs = response.getOutputStream();
OutputStream buffOs = new BufferedOutputStream(resOs);
OutputStreamWriter outputwriter = new OutputStreamWriter(buffOs, "gbk");


这样就能够解决乱码问题。

完整代码如下:

private void writeCsv(HttpServletResponse response, List<Record> recordList) {

response.setContentType("data:text/csv;charset=gbk");
response.setHeader("Content-Disposition", "attachment; filename=test.csv");
OutputStream resOs = null;

try {
resOs = response.getOutputStream(); OutputStream buffOs = new BufferedOutputStream(resOs); OutputStreamWriter outputwriter = new OutputStreamWriter(buffOs, "gbk");
CsvWriter writer = new CsvWriter(outputwriter, ','); writer.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }));
// write data
//
writer.flush();
writer.close();
} catch (IOException e) {
log.error(e.getMessage(), e);
} finally {
try {
if (resOs != null) {
resOs.flush();
resOs.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: