python3一个中文3个字符_python使用split(‘中文字符’)出错

根据网页所给的字符编码将其字节数据

1decode('gb2312')

用的是scrapy,从给出的url获取body

1

2

3

4

5

6

7def 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

请问怎么解决?

1

2

3

4

5

6

7

8

9

10

11# 我尝试了这样做

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

再看看上面的错误,是

1byte 0xa3

于是我在终端上试了几次,结果发现冒号的gb2312 encode

1

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

':'

所以应该就是python拿默认的utf-8来decode gb2312的body, 所以我能想到的一个办法就是修改默认编码值,也就是第一行的声明:

1# -*- coding: gb2312 -*-

然后运行果然成功,请问还有没有别的方法?

Python3

bVy5Of

decode后,body应该是unicode编码,使用下面的方式即可:

1body = body.split(u':')

又是一个编码的问题,可以参考:人机交互之字符编码和 五分钟战胜 Python 字符编码。

1

2

3

4

5

6

7

8

9

10

11

12

13

14#! /usr/bin/env python

# -*- coding: utf-8 -*-

# 模仿你从网页获得的数据

data = "学分:1.5".decode("utf-8").encode('gb2312')

# data = u"学分:1.5".encode('gb2312')

print type(data)

body = data.decode('gb2312')

print type(body) # unicode 类型

# 两种解决方案

print body.split(u':') # unicode 对应 unicode

print body.encode("utf-8").split(":") # utf-8 对应 utf-8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值