python中文字符编码问题

本文针对Python爬虫获取的文本中使用中文冒号作为分隔符时遇到的问题进行了详细解析,并给出了具体的解决方案。包括如何处理Python 2.x版本中的编码问题,以及如何避免Unicode与byte类型混合使用导致的错误。

问题来源:需要对爬取到的如下文本进行分隔,且以“:”(中文冒号)进行分隔。

277b6977571c15ab29b562abdc86d135047.jpg

对应文本分隔代码:

IrmComTemp = IrmCom.strip().split(unicode(':','utf-8'))

问题1描述:出现如下错误:SyntaxError: Non-ASCII character '\xef' in file 

问题1解决:在源码第一行(必须保证是第一行)添加如下字符编码限定语句:

# -*- coding: UTF-8 -*-

问题1原因:python2会默认使用ASCII编码,而ASCII编码不支持中文,所以会出现异常(具体回顾之前关于编码的文章)。如果要在python2的py文件里面写中文,则必须要添加这一行声明文件编码的注释。

问题2描述:添加之后又出现UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0:错误

问题2解决:

#错误代码
IrmComTemp = IrmCom.strip().split(':','utf-8')
#正确代码
IrmComTemp = IrmCom.strip().split(unicode(':','utf-8'))

问题2原因:(参考'ascii' codec can't decode byte 0xef in position 0:ordinal not in range(128)错误解决与原理分析)utf-8只是Unicode字码表的编码方式,Unicode除此之外还可以使用utf-16等编码成byte code储存,在Python中我们已经指定了utf-8编码方式,那么所有带中文的字符串都会被认为是utf-8编码的byte string(例如:':'),但是在函数中所产生的字符串则被认为是unicode string。unicode string 和 byte string 是不可以混合使用的,一旦混合使用了,就会产生这样的错误。

本文中,函数返回的爬取下来的网页被认为是Unicode string,':'被认为是byte string,由于预设的解石马器(醉了,提交的时候说这里敏感。。。。)是ascii,所以就不能识别中文byte string。然后就报错了。

参考的博文中作者提供了两种解决方案:1》unicode string转byte string;2》byte string 转unicode string。总之就是统一编码。

由于对爬取下来的网页进行转换比较麻烦,所以我们这里使用byte转unicode的方案,另一种方案尚待尝试。

转载于:https://my.oschina.net/u/3636678/blog/1860243

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值