You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含变音符号与特殊字符的URL用requests请求报UnicodeDecodeError求助

使用requests获取含特殊字符URL时的UnicodeDecodeError问题

我尝试用requests库获取页面HTML内容时,出现了UnicodeDecodeError错误。可复现代码如下:

import requests
import urllib

url = "https://www.unique.nl/vacature/coördinator-facilitair-(v2037635)"

我试过以下几种方式,均返回UnicodeDecodeError:

尝试1:

requests.get(url)

尝试2:

requests.get(requests.utils.requote_uri(url))

尝试3:

requests.get(urllib.parse.quote(url))

尝试4:

requests.get(urllib.parse.quote(url.encode("Latin-1"), ":/"))

另外,我还尝试将URL编码为utf-8、latin1或unicode_escape,也无法解决问题。我到底忽略了什么?

完整错误信息:

File /usr/local/lib/python3.9/site-packages/requests/api.py:75, in get(url, params, **kwargs)
     64 def get(url, params=None, **kwargs):
     65     r"""Sends a GET request.
     66
     67     :param url: URL for the new :class:`Request` object.
   (...)
     72     :rtype: requests.Response
     73     """
---> 75     return request('get', url, params=params, **kwargs)

File /usr/local/lib/python3.9/site-packages/requests/api.py:61, in request(method, url, **kwargs)
     57 # By using the 'with' statement we are sure the session is closed, thus we
     58 # avoid leaving sockets open which can trigger a ResourceWarning in some
     59 # cases, and look like a memory leak in others.
     60 with sessions.Session() as session:
---> 61     return session.request(method=method, url=url, **kwargs)

File /usr/local/lib/python3.9/site-packages/requests/sessions.py:542, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    537 send_kwargs = {
    538     'timeout': timeout,
    539     'allow_redirects': allow_redirects,
    540 }
    541 send_kwargs.update(settings)
--> 542 resp = self.send(prep, **send_kwargs)
    544 return resp

File /usr/local/lib/python3.9/site-packages/requests/sessions.py:677, in Session.send(self, request, **kwargs)
    674 if allow_redirects:
    675     # Redirect resolving generator.
    676     gen = self.resolve_redirects(r, request, **kwargs)
--> 677     history = [resp for resp in gen]
    678 else:
    679     history = []

File /usr/local/lib/python3.9/site-packages/requests/sessions.py:677, in <listcomp>(.0)
    674 if allow_redirects:
    675     # Redirect resolving generator.
    676     gen = self.resolve_redirects(r, request, **kwargs)
--> 677     history = [resp for resp in gen]
    678 else:
    679     history = []

File /usr/local/lib/python3.9/site-packages/requests/sessions.py:150, in SessionRedirectMixin.resolve_redirects(self, resp, req, stream, timeout, verify, cert, proxies, yield_requests, **adapter_kwargs)
    146 """Receives a Response. Returns a generator of Responses or Requests."""
    148 hist = []  # keep track of history
--> 150 url = self.get_redirect_target(resp)
    151 previous_fragment = urlparse(req.url).fragment
    152 while url:

File /usr/local/lib/python3.9/site-packages/requests/sessions.py:116, in SessionRedirectMixin.get_redirect_target(self, resp)
    114     if is_py3:
    115         location = location.encode('latin1')
--> 116     return to_native_string(location, 'utf8')
    117 return None

File /usr/local/lib/python3.9/site-packages/requests/_internal_utils.py:25, in to_native_string(string, encoding)
     23         out = string.encode(encoding)
     24     else:
---> 25         out = string.decode(encoding)
     27 return out

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf6 in position 29: invalid start byte

内容的提问来源于stack exchange,提问作者Zal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:31:12