本帖最后由 Clark.Pan 于 2024-9-9 11:25 编辑
背景:
通过GcExcel导出CSV功能导出的CSV文件在打开后,中文部分会显示成乱码。
分析:
首先确认了导出CSV乱码的情况是用Excel打开,而非文本文件,通过文本文件打开,不会存在乱码问题。
那么问题变成了为什么Excel打开后会显示乱码,经过查找资料得知,Excel默认的编码格式为ANSI编码,这里首先了解ANSI编码的特性:
ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xFFFF来编码,即扩展的ASCII编码。不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 JIS 编码。
由此可知,在不同语言的操作系统下,ANSI的编码格式是不同的:
例如:在英文操作系统下编码格式为ISO-8859-1,在中文操作系统下则是GBK。
而GcExcel默认导出CSV的编码格式为UTF-8,而在中文的window操作系统下,Excel打开的编码是GBK,所以这就是导致乱码的原因。
解决方案有两种:
一.在导出CSV的时候设置编码格式为GBK,如果设置GBK之后仍然有部分特殊字符存在乱码问题,请参考这篇文章的处理方式。
- CsvSaveOptions options = new CsvSaveOptions();
- options.setEncoding("GBK");
复制代码 二.另一种就是在Excel中解决,Excel专门有提供对于导入CSV文件选择编码格式的方法,操作如下:
1.打开 Excel,执行“数据”->“从文本/CSV”
2.选择 CSV 文件,出现文本导入向导,这里面选择编码然后导入即可。
这里有一点要注意:
因为Java项目牵扯工程编码,而GcExcel默认导出CSV的编码格式是UTF-8。这里要注意工程编码要与导出CSV的编码格式保持一致,否则在生成CSV的时候就会出现乱码,这时候上述的做法将无法进行转换。
|
|