最近网友抱怨,收到别人发来的数据表,打开后长这样:

导入CSV文件 java 导入csv文件出现乱码_CSV

CSV再EXCEL中显示为乱码



除了数字,其他是啥玩意儿

完全乱码。。。

(乱码!乱马!乱吗?乱!)

但是当使用记事本打开,检查确认是否文件有问题时,显示完全正常,根本没有乱码。




导入CSV文件 java 导入csv文件出现乱码_默认网关出现乱码_02

CSV在记事本中显示正常



用最最普通记事本打开文件能够正常显示,用Excel打开却显示不正常。。。

这是怎么回事?(乱马也在想...)




难道没安装好需要卸载重装?(走投无路的招数,然并卵)

No~No~No

实际上是由于文件编码与Excel编码不一致造成。

查看csv文件的编码:


导入CSV文件 java 导入csv文件出现乱码_默认网关出现乱码_03

CSV文件的编码


使用记事本打开csv文件,点击另存为,在最下面一行的编码默认显示,就是此文件的编码。

而Excel的默认编码目前没有定论,官方也没有给出任何解释说明。

但众多猜测集中在两种:或是Unicode或是ANSI。

一边是编码UTF-8,另一边是Unicode/ANSI,两者不一致。

无论哪一种都是由于Excel与CSV文件的编码不一致,因此才出现文章开头的情况。

了解了原理,那么如何解决乱码问题呢?

以上可知,乱码是由于两方编码不对称。

而此操作只涉及到原文件和Excel两方的编码。

因此,解决方向也是两个:要么修改原文件编码,要么修改excel编码。

  • 方法一:修改原文件的编码

将原文件的编码修改为ANSI,这样与Excel默认保持一致,使用Excel打开时可以正常显示

第一步,使用记事本打开csv原文件

第二步,进行文件另存的操作


导入CSV文件 java 导入csv文件出现乱码_导入CSV文件 java_04


名字无需改动,而是要改动编码类型,由原来的"UTF-8"改为"ANSI",与excel默认编码保持一致。

现在试一试用Excel打开此文件,乱码就不见了,数据正常显示(O(∩_∩)O~~)


导入CSV文件 java 导入csv文件出现乱码_csv文件怎么转成excel_05

方法二:将文件导入到Excel中,调整编码为可识别格式

第一步,选择导入文件


导入CSV文件 java 导入csv文件出现乱码_csv文件怎么转成excel_06


第二步,选择文件后,单击确认进入文本导入向导

找到"文件原始格式",默认为"简体中文",但在前面我们查看过原文件编码为"UTF-8",因此在这里设置成"UTF-8"。


导入CSV文件 java 导入csv文件出现乱码_CSV_07

手动修改Excel中识别原文件的编码


这波操作可以理解成在手动告诉Excel不要用默认编码,而是应该用原文件的编码。

第三步,设置分隔符

通常CSV文件的分隔符有两种:逗号或者空格。


导入CSV文件 java 导入csv文件出现乱码_默认网关出现乱码_08

设置分隔符


因为之前在使用记事本查看时,已经观察到使用的是逗号分隔,所以在这里直接勾选逗号即可。

第三步,完成以上两步,点击完成,基本上就大功告成了。


导入CSV文件 java 导入csv文件出现乱码_默认网关出现乱码_09


此时只要告诉excel要将原文件导入的起始单元格位置就可以开始导入了。如果需要搭建模型,记得把下面的”添加到模型”也勾选上。

表哥TIPS:

用Python导入CSV文件时,同样不会出现乱码,而且导入速度很快(千行毫秒)。

代码贴在下面,感兴趣的朋友可以自行试一试。


导入CSV文件 java 导入csv文件出现乱码_两个excel表格同时显示_10

Python的方法导入csv文件


以上就是目前解决乱码显示,常使用的两个方法,你学会了吗?