写爬虫的时候,对网页都进行了decode('utf-8'),把编码转换成unicode进行处理
html = getHtml(url).decode('utf-8','ignore')
但是在爬取过程中,遇到类似这样的信息时
'DepartmentofDiagnosticandInterventionalRadiology,UniversityHospitalZurich,R
\ue242mistrasse100,8091Zürich,Switzerland;'
可以注意到中间有R\ue242这样数据
这些数据用print可以正常打印出来
但是写入csv文件的时候就会产生错误
spamwriter.writerow(data)
UnicodeEncodeError: ‘gbk’ codec can’t encode character '\ue242' in position 159: illegal multiby
不太明白为什么会出错,之前对网页信息都进行了decode,处理的应该都是unicode才对。这样的话,无论后面如何处理,\ue242应该已经被编码成了unicode,为什么不可以encode成gbk存储起来?
系统是win 8x64,默认编码是gbk,之前的print操作不也是encode成gbk再打印的吗?
要怎么处理?
不同编码集能表示的符号是不同的,而且这些符号解码后对应的值也不同。
在将一个二进制数据编码成文本时,如果有一个符号无法编码,很有可能是因为选择的编码方式不正确。
对于这种情况下,比起不声不响地跳过这部分内容,python的默认方式是选择了使用异常进行提示。
个人觉得,这种方式可以避免一些逻辑错误,因此是一种比较明智的方式。
对于这一问题的处理:
选择正确的编码方式当然是正确的解决方案。
按题主的意思,就是要用gbk编码,那么根据encode函数的说明:
encode(...)
encode()函数有两个参数,第二个参数errors用来设置在编码错误的时候如何解码。
使用backslashreplace就行了。