UnicodeEncodeError:' ascii'编解码器不能对位置90-96中的字符进行编码:序数不在范围内(128)

时间:2017-09-25 18:52:19

标签: python python-3.x

我有这段代码:

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'对象没有属性'超时'

我试着这样做: 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'对象没有属性'超时'

我该怎么办?

2 个答案:

答案 0 :(得分:3)

您无法在网址中使用非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

答案 1 :(得分:0)

此方法对我有用(我使用Pycharm ide)。您转到client.py,然后将request.encode('ascii')更改为request.encode('utf-8)或所需的任何编码器。现在应该可以正常工作了

编辑:您需要更改源文件才能在url中使用utf字符。在request.encode中,很难对ascii进行编码