python中遇到UnicodeEncodeError的解决方法之一

我最近玩python遇到使用json.loads转换json内容时,如果里面包含Ⅰ·Ⅱ·Ⅲ·Ⅳ·Ⅴ·Ⅵ·Ⅶ·Ⅷ·Ⅸ·Ⅹ·Ⅺ·Ⅻ这些特殊字符时,就会报错。
UnicodeEncodeError: ‘ascii’ codec can’t encode character ‘\uff1a’ in position 40: ordinal not in range(128)
报错代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  File "/usr/lib/python3.5/urllib/request.py", line 163, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.5/urllib/request.py", line 466, in open
response = self._open(req, data)
File "/usr/lib/python3.5/urllib/request.py", line 484, in _open
'_open', req)
File "/usr/lib/python3.5/urllib/request.py", line 444, in _call_chain
result = func(*args)
File "/usr/lib/python3.5/urllib/request.py", line 1297, in https_open
context=self._context, check_hostname=self._check_hostname)
File "/usr/lib/python3.5/urllib/request.py", line 1254, in do_open
h.request(req.get_method(), req.selector, req.data, headers)
File "/usr/lib/python3.5/http/client.py", line 1107, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python3.5/http/client.py", line 1142, in _send_request
self.putrequest(method, url, **skips)
File "/usr/lib/python3.5/http/client.py", line 984, in putrequest
self._output(request.encode('ascii'))
UnicodeEncodeError: 'ascii' codec can't encode character '\uff1a' in position 40: ordinal not in range(128)

这个问题困扰我好几天,中间折腾的过程就不多说了。
下面说一下我的解法方法,灵感来自上面这段报错代码的第17和18行。
首先用vi或nano等编辑器,打开/usr/lib/python3.5/http/client.py这个文件,然后定位到984行。将self._output(request.encode('ascii'))修改成self._output(request.encode('utf-8'))。重新跑代码后完美解决。

本文标题:python中遇到UnicodeEncodeError的解决方法之一

文章作者:Hank ZHU

发布时间:2019年02月08日 - 13:12

最后更新:2019年02月08日 - 16:06

原始链接:http://zealot.top/python中遇到UnicodeEncodeError的解决方法.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际

如需转载请注明文章出处,并保留原文链接及作者。感谢您尊重别人的劳动成果!


-------------本文结束 感谢您的阅读-------------
-------------如果觉得这篇文章不错,可以请作者喝杯咖啡!-------------