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

前几天在做项目的时候,需要将数据库中读取的账单数据用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};//BOM
				FileOutputStream 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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值