python中,不论是pd.read_csv还是open都可以指定encoding, 通常我们可用的是utf-8或者gbk, 这两种编码格式也是较为常见的编码格式,以这两种编码格式读出来的内容是我们可读的。但是有时文件保存是其他的格式,这时如果encoding指定不正确的话就无法成功读取该文件,比如所latin编码格式的文件。当然,可以指定encoding为latin来读取该文件,但是读取后显示出来的内容是不可理解的,示例如下:
#ÄãºÃ2020#ÐÂÄêµÚÒ»ÌìÔªÆøÂúÂúµÄÔçÆð³öÃÅÂòÔç·¹½á…
在liunx中,可以vim打开该文件,然后在最后输入:set fileencoding 查看文件编码格式,也可以用命令file xxx来查看xxx的编码格式。
查看完之后就可以用命令iconv来对文件格式做转码,也可以直接用:set fileencoding=xxx来编码,但是文件特别大的时候,这个方法不太优雅,甚至成功不了。
iconv使用命令为
iconv -c -f 原始文件编码格式 -t 期望编码格式 原始文件>期望文件
-c 的作用是遇到不可转码的字符跳过,这样就保证了会把能转的都转了,如果不加的话,遇到不可转码的字符后就会停止,就可能出现转码后的文件内容缺失。
转码后再用python读取就可以了
这里有一个问题,iconv支持的编码格式是有限的,比如说latin就是不支持的,这个时候把原始编码格式换个写法就成功了,换成gbk或者gb18030都是可以成功转码的,不清楚为什么。。
不论什么编码的文件,open的时候模式指定为二进制方式的话是都可以打开的,打开后对内容进行decode也是可以的,但是比较麻烦,而且decode的时候可能会遇到无法成功decode的内容,因此这个方法不是特别好。
中文的编码格式gbk,gb18030,gb2312覆盖的范围是不一样的,有时候gbk无法decode的内容,gb18030是可以成功decode的,自己尝试吧