unicode - python使用split(‘中文字符’)出错

查看:867
本文介绍了unicode - python使用split(‘中文字符’)出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

根据网页所给的字符编码将其字节数据decode('gb2312')
用的是scrapy,从给出的url获取body

def parse(self, response):
    body = response.body.decode('gb2312')
    print(body)    
    学分:1.5 # body就是这样之类的,中间的冒号是中文的冒号
    # 想弄成的效果就是['学分','1.5']
    body = body.split(':') # 就这样使用中文的冒号符来分割,但是出错
SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xa3 in position 0: invalid start byte

请问怎么解决?

解决方案

# 我尝试了这样做
print(body.encode('gb2312'))
print(body.encode('utf-8'))
输出如下:
b'\xb3\xd0\xb5\xa3\xb5\xa5\xce\xbb\xa3\xba\xd5\xfe\xb7\xa8\xd1\xa7\xd4\xba'
b'\xe6\x89\xbf\xe6\x8b\x85\xe5\x8d\x95\xe4\xbd\x8d\xef\xbc\x9a\xe6\x94\xbf\xe6\xb3\x95\xe5\xad\xa6\xe9\x99\xa2'
#再令两个结果分别为gb2312和utf8
>>> gb2312.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 0: invalid start byte

再看看上面的错误,是byte 0xa3
于是我在终端上试了几次,结果发现冒号的gb2312 encode

>>> b'\xa3\xba'.decode('gb2312')
':'

所以应该就是python拿默认的utf-8来decode gb2312的body, 所以我能想到的一个办法就是修改默认编码值,也就是第一行的声明:# -*- coding: gb2312 -*-
然后运行果然成功,请问还有没有别的方法?

这篇关于unicode - python使用split(‘中文字符’)出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆