[bug]java导出csv用Microsoft Office Excel打开乱码解决

bugjava导出csv用Microsoft Office Excel打开乱码

‍

现象

首先这个csv文件用macbook自带的 "Numbers表格" 软件打开是不乱码的,

但是使用者是Windows系统,他的电脑没有"Numbers表格"工具,

​​

他用Microsoft Office Excel打开之后出现乱码,如下图所示:

​​

解决方式

‍

我网上查了下说是编码问题,有个最简单的办法,添加这行代码: "writer.write("\ufeff");"

‍

我试了一下,发现好使, 另外我这个代码是之前的开发人员写的代码,我只是在这个代码添加了箭头指向的"writer.write("\ufeff");" 一行代码,然后乱码问题就解决了.

​​

此时导出的csv文件用 Microsoft Office Excel 导出不乱码了.

​​

‍

‍

ai大模型解释writer.write("\ufeff"); 是什么意思

这行代码 writer.write("\ufeff"); 是在 CSV 文件的开头写入一个 UTF-8 的字节顺序标记(BOM)。这是一个很好的做法,特别是当你希望 Excel 能正确识别 UTF-8 编码的 CSV 文件时。让我解释一下这行代码的作用和重要性:

  1. \ufeff 是 Unicode 字符 U+FEFF 的表示,也称为零宽度非换行空格(Zero Width No-Break Space)。
  2. 当这个字符出现在 UTF-8 编码的文件开头时,它被称为 UTF-8 BOM(Byte Order Mark)。
  3. BOM 的主要作用是标识文件的编码方式。对于 UTF-8 编码的文件,BOM 不是必需的,但它可以帮助一些应用程序(如 Microsoft Excel)正确识别文件编码。
  4. 特别是在处理包含非 ASCII 字符(如中文)的 CSV 文件时,添加 BOM 可以显著提高文件在 Excel 中的兼容性,避免乱码问题。
  5. 当 Excel 打开带有 UTF-8 BOM 的 CSV 文件时,它会自动识别为 UTF-8 编码,从而正确显示所有字符。

在你的代码中,这行语句确保了生成的 CSV 文件在 Excel 中打开时能够正确显示中文等非 ASCII 字符。这是一个很好的做法,特别是考虑到你的应用可能处理多语言内容。

如果你遇到某些系统或应用无法正确处理带 BOM 的文件,你可以考虑根据具体需求来决定是否包含这个 BOM。但对于主要面向 Excel 用户的 CSV 文件,包含 BOM 通常是一个好主意。

‍

相关推荐
程序猿乐锅7 小时前
【黑马点评 | 第十一篇】关注 Feed 流实现
java·数据库·redis·分布式·后端·缓存·maven
开开心心就好7 小时前
图片白底怎么去掉?抠图工具抠完背景透明
java·服务器·开发语言·pdf·ocr·散列表·启发式算法
东方芷兰8 小时前
Agent 技术摘要 05 —— BP、SaaS、B2B、C2B、B2C
java·笔记·python·语言模型·自然语言处理
Chen—LSN8 小时前
数据结构——拿捏复杂度
java·c语言·开发语言·数据结构·经验分享·笔记·算法
一条破秋裤8 小时前
Linux 线程同步:条件变量
java·linux·jvm
步行cgn8 小时前
Spring AOP 切面的先后顺序详解
java·spring
ym hyd 1118 小时前
宝宝早教服务系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·spring boot
自强的小白8 小时前
微服务之间的依赖传递和调用(实体类的模块传递以及负载均衡的调用!)注册中心
java·微服务
她说彩礼65万9 小时前
C语言 单引号与双引号
java·服务器·c语言
知守观9 小时前
百万级数据导出OOM:POI的坑与EasyExcel的流式写入实战(附内存对比)
java·后端