python编码问题

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的,自己尝试吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值