UnicodeEncodeError: 'ascii'编解码器无法对第90-96个位置的字符进行编码:该数字不在128的范围内

4

我有这段代码:

url= 'https://yandex.ru/search/xml?user=uid-2h3232xfhboy&key=03.292922330523:6b4c80ghghghhghgdsfdsfds4c4b4a7872fb7d2bb04bfdgbb02b76c3d&query='
key = "абс"
 url = url + key
        print(url)
        xml = urllib.request.urlopen(url).read()

但是我遇到了一个错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 90-96: ordinal not in range(128)

我该怎么办?

我试着做了这个:url = url.encode("utf-8"),但没有帮助。出现了这个错误:

AttributeError: 'bytes'对象没有'timeout'属性

我尝试这样做:url = u''.join((self.ya_url, key)).encode('utf-8'),如此建议在这里:UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128),但还是出现了同样的错误。

AttributeError: 'bytes'对象没有'timeout'属性

我该怎么办?


您是否查看过与此非常相似的其他问答(请参阅“相关”侧栏)? - glibdud
@glibdud 是的,我已经阅读了一些非常类似于这个问题的问答(请参见问题的最后3段)。 - user2950593
请参考此问题了解AttributeError的解释。 - glibdud
2个回答

7

在URL中不能使用非ASCII字符。您需要适当地引用key值:

import urllib.parse

url= 'https://yandex.ru/search/xml?user=uid-2h3232xfhboy&key=03.292922330523:6b4c80ghghghhghgdsfdsfds4c4b4a7872fb7d2bb04bfdgbb02b76c3d&query='
key = "абс"
quoted = urllib.parse.quote(key)
url = url + quoted

0

这个方法对我起作用(我使用的是Pycharm IDE)。您转到client.py,然后将request.encode('ascii')更改为request.encode('utf-8)或任何编码器。现在应该可以无问题地运行它。

编辑:您需要更改源文件以便在URL中使用utf字符。在request.encode中,已硬编码为ascii。


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