Java IO流将数据输出到.csv文件中,excel打开时乱码问题的解决

来源:互联网 发布:excel转pdf软件 编辑:程序博客网 时间:2024/05/28 15:35

前几天在做项目的时候,需要将数据库中读取的账单数据用IO流输出到.csv文件中保存,然后用excel表格打开查看。但是用excel表格打开时,出现的是乱码。想了很多办法都没有解决。最后我的导师想起来他之前也遇到过类似的问题。原来是微软的excel等编辑工具,为了将utf-8与其他编码区分开来,微软采用带有BOM(byte order marker 字节序标记)的UTF-8编码格式,这是微软的一种习惯。也就是说,在用输出流写出数据之前,要先将BOM写入到文件中,作为标记,然后再将数据写入到文件中,这样获得的文件才不会乱码。

代码如下:

BufferedWriter writer = null;try {byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};//BOMFileOutputStream op = FileUtils.openOutputStream(file);op.write(uft8bom);//先将BOM输出到文件中writer = new BufferedWriter(new OutputStreamWriter(op,"UTF-8"));writer.write("产品名称,流量大小,省份 ,运营商,使用范围,购买数量,销售价格,手机号,是否退款,状态,时间");writer.newLine();for(ClientCheckBillExportVo v : list){writer.write(v.getProductName().toString() + ",");writer.write(v.getFlow().toString() + ",");writer.write(v.getProvinceName().toString() + ",");writer.write(v.getOperatorName().toString() + ",");writer.write(v.getScopName().toString() + ",");writer.write(v.getBuyNum().toString() + ",");writer.write(v.getShowSellPrice().toString() + ",");writer.write(v.getPhone().toString() + ",");writer.write(v.getRefundName().toString() + ",");writer.write(v.getStatusName().toString() + ",");writer.write(v.getUpdateTime());writer.newLine();}writer.flush();} catch (IOException e) {e.printStackTrace();}finally{try {writer.close();} catch (IOException e) {e.printStackTrace();}}

输出的BOM是16进制的EF BB BF

关于BOM详细请参考BOM的相关资料

阅读全文
1 0
原创粉丝点击