python对文件转码的时候,对转码报错的处理。

情况大概是这样的,后台收集了很多文件名称的数据,生成了一些编码格式为utf-8的csv文件,这些文件直接用excel打开会乱码,所以就需要转码成GB2312格式,
但是通过content.decode("utf-8").encode("GB2312")转码时报错提示UnicodeError:'utf8' codec can't decode byte 0xc7in position461:invaild continuation byte。
python对文件转码的时候,对转码报错的处理。_第1张图片

转码时首先需要通过decode("utf-8")将文本转换成中间码unicode,这一步报错的提示是在文本第461个字节处转码失败,chardet.detect(filename)读取到文本的格式虽然是utf8的,但是文本里面却混有多种格式的字符,其中第461个字节不是utf8格式的,也就不能从utf8转换成unicode格式了 ,这时候可以通过增加一个参数"ignore"来跳过文件中无法转码的字符,写成 ,更改后运行结果如下:


此时decode("utf-8")这一步没有问题了,但是encode("GB2312")又出现问题,问题原因与上面类似,GB2312因为识别不了文本中的非法字符u'\ufeff',导致编码失败,处理方法同上,可以增加一个参数"ignore"来跳过GB2312识别不了的非法字符,写成decode("GB2312","ignore"),修改后运行正常。

总结:使用python对文件进行转码的时候,特别是写一些爬虫的时候,由于网上很多内容包含很多生僻字、特殊符号等,一般编码格式都无法应对了,转码的时候可以通过增加一个"ignore"来跳过这些生僻字符。

你可能感兴趣的:(python对文件转码的时候,对转码报错的处理。)