
用java代码解决excel打开csv文件乱码问题
发布日期:2021-05-10 04:21:18
浏览次数:21
分类:精选文章
本文共 1608 字,大约阅读时间需要 5 分钟。
为了解决由于缺少字节顺序标记(BOM)导致的乱码问题,我们可以通过在文件开头添加UTF-8编码的BOM来修复代码。
问题分析
当从外部文件读取数据并保存到新文件时,若原文件没有包含BOM,使用Excel打开时可能会出现乱码。此原因是因为BOM用于标明文件的编码和字节顺序。当缺失BOM时,Excel无法正确识别编码方式,从而导致错误显示为乱码。
解决方案(修改后的代码)
public static void main(String[] args) { byte[] commonCsvHead = new byte[3]; commonCsvHead[0] = (byte) 0xEF; commonCsvHead[1] = (byte) 0xBB; commonCsvHead[2] = (byte) 0xBF; try { File file = new File("c://csv//aa.csv"); FileInputStream inputStream = new FileInputStream(file); byte[] inputBytes = IOUtils.toByteArray(inputStream); // 添加BOM字节 byte[] outputBytes = new byte[inputBytes.length + 3]; System.arraycopy(inputBytes, 0, outputBytes, 0, inputBytes.length); // 将BOM添加到输出的开始部分 outputBytes[0] = (byte) 0xEF; outputBytes[1] = (byte) 0xBB; outputBytes[2] = (byte) 0xBF; File outputFile = new File("c://csv//newfile.csv"); FileOutputStream outputStream = new FileOutputStream(outputFile); outputStream.write(outputBytes); outputStream.flush(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); }}
BOM的作用解释
字节顺序标记(BOM,Byte Order Mark)用于告知文件使用的编码方式和字节顺序(大端或小端)。在UTF-8编码中,BOM的值为0xEF 0xBB 0xBF。在文件开头添加此BOM,让Excel和其他读取程序识别编码,从而避免乱码问题。
BOM的作用机制
- UTF-8编码:BOM为EF BB BF。在文件开头添加这些字节,使Excel识别为UTF-8编码。
- 其他编码:不同编码有各自的BOM。例如,UTF-16大端为FE FF,小端为FF FE。
注意事项
确保编码正确:确认原始文件的编码设置。如果文件没有BOM,按照正确的UTF-8编码保存到新文件,并在开始添加BOM。
避免BOM重复:通常,只有实际文件开头需要添加BOM。操作时避免双重BOM重复添加。
检查文件类型:涉及的编码类型不同,BOM也需要相应选择。例如,文本文件使用UTF-8,嵌入式系统可能使用不同的编码。
通过上述方法,您可以确保文件正确解码,避免乱码出现问题。
发表评论
最新留言
很好
[***.229.124.182]2025年04月22日 18时41分52秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux系统时间与硬件时间及时间同步
2019-03-15
Spring 和 DI 依赖注入
2019-03-15
中序线索二叉树的遍历
2019-03-15
文字策略游戏 android studio(学习intent,textview,等等)
2019-03-15
laravel server error 服务器内部错误
2019-03-15
17_注册Github账号
2019-03-15
Linux驱动实现GPIO模拟I2C读写操作
2019-03-15
iJ配置Maven环境详解
2019-03-15
仿QQ登陆界面
2019-03-15
HttpServletResponse-完成文件下载
2019-03-15
什么题目的暂时还没想好
2019-03-15
Python中pip安装模块太慢
2019-03-15
docker安装
2019-03-15
N皇后问题解法(递归+回朔)
2019-03-15
面试题 08.01. 三步问题
2019-03-15
剑指 Offer 11. 旋转数组的最小数字
2019-03-15
word文档注入(追踪word文档)未完
2019-03-15
作为我的第一篇csdn博客吧
2019-03-15
java中简单实现栈
2019-03-15