UnicodeDecodeError: 'ascii'编解码器无法解码字节0xf0,位于位置6233处:序数不在128的范围内。

3

我正在进行一个新项目,但是我无法修复标题中的错误。

以下是代码:

#!/usr/bin/env python3.5.2

import urllib.request , urllib.parse


def start(url):
    source_code = urllib.request.urlopen(url).read()
    info = urllib.parse.parse_qs(source_code)
    print(info)


start('https://www.youtube.com/watch?v=YfRLJQlpMNw')
4个回答

4
出错是由于 .encode 作用于一个 Unicode 对象导致的。因此,我们需要使用将字节串转换为 Unicode 字符串的方法。
.decode('unicode_escape')

所以代码将会是:

#!/usr/bin/env python3.5.2

import urllib.request , urllib.parse


def start(url):
    source_code = urllib.request.urlopen(url).read()
    info = urllib.parse.parse_qs(source_code.decode('unicode_escape'))
    print(info)


start('https://www.youtube.com/watch?v=YfRLJQlpMNw')

1

试试这个

source_code = urllib.request.urlopen(url).read().decode('utf-8')

1
错误信息很明显:输入字符串中有一个字节0xf0,而预期输入应为ascii字符串。
你本应该给出确切的错误消息以及发生错误的行数,但我猜测它发生在info = urllib.parse.parse_qs(source_code),因为parse_qs要求传入unicode字符串或者ascii字节字符串。
首先要问的问题是,为什么你要从youtube调用parse_qs,因为Python标准库的文档说:
解析作为字符串参数给出的查询字符串(类型为application/x-www-form-urlencoded的数据)。数据将作为字典返回。字典键是唯一的查询变量名称,值是每个名称的值列表。
因此,您将对其进行解析,以根据=&字符将其解释为查询字符串,形式为key1=value11&key2=value2&key1=value12,以得到{ 'key1': [ 'value11', 'value12'], 'key2': ['value2']}

如果您知道为什么需要这样做,您应该首先使用正确的编码方式将字节字符串解码为Unicode字符串,或者如果不确定,可以使用能够接受任何字节的Latin1

def start(url):
    source_code = urllib.request.urlopen(url).read().decode('latin1')
    info = urllib.parse.parse_qs(source_code)
    print(info)

0

这段代码确实有点奇怪。你正在使用查询解析器来解析网页的内容。 所以,你应该使用类似于this的东西,而不是使用parse_qs。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接