由于很多系统导出的 CSV 都是 UTF-8 编码的,而且生成 CSV 文件时在文件头没有添加 BOM 标记(Byte Order Mark 字节顺序标记)的,所以用户拿到的就是一个无 BOM 标记的 UTF-8 编码的 CSV 文件。由于电脑安装了 Excel,所以 CSV 文件默认是关联用 Excel 打开的。当用户直接双击打开 CSV 文件时,Excel 首先会检测一下这个文件头是否有 BOM,有的话则 Excel 将使用 BOM 指定的编码格式打开文件,例如如果在文件头中检测到 EF BB BF 的 BOM,Excel 就会使用 UTF-8 编码打开文件,这样就不会有乱码了。但由于用户实际拿到的 UTF-8 编码的 CSV 文件,但是文件头中没有 BOM!所以 Excel 就使用系统默认编码格式来打开文件。在简体中文 Windows 系统及中文版本的 Excel 中,默认的编码格式是 GB2312,所以就导致了中文乱码!你可以使用一些 IDE(例如 VS Code),把文件用 GB2312 打开来验证一下,你会发现乱码的内容和用 Excel 打开时是一样的!用 GB2312 编码打开无 BOM 的 CSV为什么用 windows 记事本无中文乱码?估计原因应该是 windows 记事本默认就是采用 UTF-8 打开文件的,而 UTF-8 是可以正常显示中文的。
我觉得可能是遇到类似问题,希望可以给你有借鉴作用