
解决java下载csv中文乱码(加BOM头) 推荐第二种方法
发布日期:2021-05-04 20:53:48
浏览次数:17
分类:技术文章
本文共 1680 字,大约阅读时间需要 5 分钟。
使用csvWriter需要引入依赖:
net.sourceforge.javacsv javacsv 2.0
File file = File.createTempFile("vehicle", ".csv"); CsvWriter csvWriter = new CsvWriter(file.getAbsolutePath(), ',', Charset.forName("utf-8")); //CsvWriter csv = new CsvWriter(file.getPath()); String[] headers = {"姓名","年龄","编号","性别","sex"}; csvWriter.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF })); csvWriter.writeRecord(headers,false); /*//csv.writeRecord(headers); System.out.println(file.getParent()); System.out.println(file.getAbsolutePath()); System.out.println(file.getCanonicalPath());*/ System.out.println(file.getPath()); csvWriter.close();
解释: 代码中生成的utf-8文件没有加BOM(byte order marker 字节序列标示) 而微软的csv文件默认是有bom标示的,因此 Java代码生成的csv文件中的中文字被标示为??等. 所以解决的办法就是在文件的开头添加BOM标示就可以.
csvWriter.write(new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }));
或者加在要写出的内容前如: String[] headers = {new String(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF }),"姓名","年龄","编号","性别","sex"};
然而,第一种方法的缺点在于会在文件头部生成多余的空白字符, 所以推荐使用第二种方法:
第二种方法是用流的方式完美解决,如下
File file = File.createTempFile("vehicle", ".csv"); FileOutputStream fos = new FileOutputStream(file); fos.write(new byte[] { (byte) 0xEF, (byte) 0xBB,(byte) 0xBF}); CsvWriter csvWriter = new CsvWriter(fos, ',', Charset.forName("utf-8")); String[] headers = {"姓名","年龄","编号","性别","sex"}; csvWriter.writeRecord(headers); csvWriter.close();
先把标示符号用流的方式传过去 这样文件内就会把他识别为标示 而不是标示字符串, 后面就可以传递自己需要的内容啦
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月11日 12时06分43秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
EXTJS4.2——10.Tab+Iframe
2019-03-05
EXTJS4.2——3.1 添加文本框
2019-03-05
WEB基础——AJAX
2019-03-05
one + two = 3
2019-03-05
Kali Day01 --- arpspoof命令进行断网攻击(ARP欺骗)
2019-03-05
echart关系图平分节点删除时自动平衡问题
2019-03-05
【Coursera】Internet History 读书笔记
2019-03-05
《ODAY安全:软件漏洞分析技术》学习心得-----shellcode的一点小小的思考
2019-03-05
Decision tree(决策树)算法初探
2019-03-05
《Unity3D/2D游戏开发从0到1(第二版本)》 书稿完结总结
2019-03-05
sctf_2019_easy_heap
2019-03-06
AT 杂题泛做
2019-03-06
StringBuilder拼接字符串,“,”在前还是在后问题
2019-03-06
给asterisk1.8.7添加menuselct选项
2019-03-06
组合模式
2019-03-06
PyQt5之音乐播放器
2019-03-06