基本环境

 使用 requests 模块发送 post 请求,请求体包含™报错 ‘

系统环境:mac

python版本:python3.8

核心提示:

UnicodeEncodeError: 'latin-1' codec can't encode character '\u2122' in position 3856:
Body ('™') is not valid Latin-1. 
Use body.encode('utf-8') if you want to send it encoded in UTF-8.

错误提示详细内容:

  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/api.py", line 119, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/sessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/sessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/urllib3/connectionpool.py", line 665, in urlopen
    httplib_response = self._make_request(
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/urllib3/connectionpool.py", line 387, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1230, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 1275, in _send_request
    body = _encode(body, 'body')
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py", line 160, in _encode
    raise UnicodeEncodeError(
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2122' in position 3856: Body ('™') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.

解决思路

数据在网络中都是通过字节数据进行传输的, 在发送数据时, requests 模块需要将字符串编码成 bytes 进行传输. 而请求体 body 里面有少见的字体内容,requests里边的 URL 编码方式默认是 拉丁 编码,无法对内容进行编码 解决方式就是手动使用 utf-8 字符集对 data 进行编码.

代码:

body = {
    "title": title,
    "content": content,
    "labels": labels

}

data=json.dumps(body, ensure_ascii=False)
response = requests.post(url, data=data.encode("utf-8"), headers=headers)


本文地址: http://chenxm.cc/article/1291.html
版权声明: 本文为原创文章,版权归  陈新明  所有,欢迎分享本文,转载请保留出处!
上一篇: 宝塔面板密码忘记的解决方案
下一篇: pyqt5 .py 文件重建/转换 .ui 文件
发表评论

还没有留言,还不快点抢沙发?