urlretrieve问题无法从url获取图像包含unicode字符串

时间:2019-12-07 15:37:29

标签: python python-3.x unicode python-unicode

我编写了一个python脚本来从url中检索图像:

url = `https://uploads0.wikiart.org/images/albrecht-durer/watermill-at-the-montaсa.jpg`
urllib.request.urlretrieve(url, STYLE_IMAGE_UPLOAD + "wikiart" + "/" + url)

我跑步时收到消息

UnicodeEncodeError: 'ascii' codec can't encode character '\u0441' in position 49: ordinal not in range(128)

我认为图片网址有问题

'https://uploads0.wikiart.org/images/albrecht-durer/watermill-at-the-monta\u0441a.jpg',

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

URL包含一个非ASCII字符(一个西里尔字母,看起来像拉丁字母“ c”)。

使用urllib.parse.quote函数转义此字符:

url = 'https://uploads0.wikiart.org' + urllib.parse.quote('/images/albrecht-durer/watermill-at-the-montaсa.jpg')
urllib.request.urlretrieve(url, '/tmp/watermill.jpg')

请勿将整个URL放入quote函数中,否则它将转义为“ https://”中的冒号(“:”)。