2023年12月7日发(作者:)
JavaIO流将数据输出到.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 = tputStream(file);
(uft8bom);//先将BOM输出到文件中
writer = new BufferedWriter(new OutputStreamWriter(op,"UTF-8"));
("产品名称,流量大小,省份 ,运营商,使用范围,购买数量,销售价格,手机号,是否退款,状态,时间");
e();
for(ClientCheckBillExportVo v : list){
(ductName().toString() + ",");
(w().toString() + ",");
(vinceName().toString() + ",");
(ratorName().toString() + ",");
(pName().toString() + ",");
(Num().toString() + ",");
(wSellPrice().toString() + ",");
(ne().toString() + ",");
(undName().toString() + ",");
(tusName().toString() + ",");
(ateTime());
e();
}
();
} catch (IOException e) {
tackTrace();
}finally{
try {
();
} catch (IOException e) {
tackTrace();
}
}
输出的BOM是16进制的EF BB BF
关于BOM详细请参考


发布评论