一、问题的产生
从mongo数据库中导出csv格式的文件,可以被excel打开。但当csv文件中含有utf-8格式(存储方式)的中文时,用excel打开就会显示乱码。
二、问题产生的原因
为什么excel打开utf-8存储方式的文件会出现乱码呢?因为excel打开文件时默认使用unicode的编码方式。在Unicode基本多文种平面定义的字符(无论是拉丁字母、汉字或其他文字或符号),一律使用2字节储存。恰恰utf-8是1字节的存储方式,所以excel直接打开时会出现乱码。
下面对一些名词稍作一下解释,便于理解上面的内容:
1- UTF是Unicode Translation
Format的缩写,即把Unicode转做某种格式的意思。一般意义上UTF是一种存储方式,分为UTF-8和UTF-16两种格式,分别占用1字节和2字节的存储空间。
2-
Unicode是一种编码方式,和ascii是同一个概念。在Unicode基本多文种平面定义的字符(无论是拉丁字母、汉字或其他文字或符号),一律使用2字节储存。(即utf-16)
3- UTF-16比起UTF-8,好处在于大部分字符都以固定长度的字节 (2字节)
储存,但UTF-16却无法兼容于ASCII编码。
4- 编码方式,简单来说既是,二进制数字与字符集的对应关系。
三、问题的解决
回到excel上来,只要将excel欲打开的中文文件的存储格式转换成utf-16(unicode),便不会显示乱码了。
四、解决的方法
1- 将mongo导出的csv文件以记事本的方式打开。
2- 点击“文件-另存为”,编码方式选择unicode,扩展名保持csv不变。保存文件。
3- 打开excel,在excel中打开刚才保存的unicode格式的csv文件。
4- excel会弹出名为“文本导入向导”的面板,点击“下一步”。
5- “分隔符号”只勾选“逗号”,点击“完成”。
6- 将转换好的文件另存为excel默认工作簿。