关于#Unicodeencoding#的问题,如何解决?(标签-Python|关键词-File)

这个问题怎么解决有兄弟能帮忙解答一下嘛


#coding:utf8

import urllib.request
import json

mode = 'transit'
origin = '清华大学'
destination = '天安门'
origin_region  = ''
destination_region = ''
output = ''


url = "http://api.map.baidu.com/direction/v1?mode="+mode\
      +"&origin="+origin\
      +"&destination="+destination\
      +"&origin_region="+origin_region\
      +"&destination_region="+destination_region\
      +"&output="+output\
      +"&ak=GuGZ01jekpjxCa1IGQCDNv608jm48wDt"

req = urllib.request.Request(url)
res = urllib.request.urlopen(req)

print (res.read())
Traceback (most recent call last):
  File "D:/IJspace/QA-Snake-master/QA/BaiduMap/Map.py", line 23, in 
    res = urllib.request.urlopen(req)
  File "D:\Python\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "D:\Python\lib\urllib\request.py", line 525, in open
    response = self._open(req, data)
  File "D:\Python\lib\urllib\request.py", line 542, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "D:\Python\lib\urllib\request.py", line 502, in _call_chain
    result = func(*args)
  File "D:\Python\lib\urllib\request.py", line 1383, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "D:\Python\lib\urllib\request.py", line 1354, in do_open
    h.request(req.get_method(), req.selector, req.data, headers,
  File "D:\Python\lib\http\client.py", line 1255, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "D:\Python\lib\http\client.py", line 1266, in _send_request
    self.putrequest(method, url, **skips)
  File "D:\Python\lib\http\client.py", line 1104, in putrequest
    self._output(self._encode_request(request))
  File "D:\Python\lib\http\client.py", line 1184, in _encode_request
    return request.encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 38-41: ordinal not in range(128)

urllib.request.urlopen不支持中英文混合的字符串,应使用urllib.parse.quote进行转换。代码如下:

import urllib.request
import json
from urllib.parse import quote
import string
 
mode = 'transit'
origin = '清华大学'
destination = '天安门'
origin_region  = ''
destination_region = ''
output = ''
 
 
url = "http://api.map.baidu.com/direction/v1?mode="+mode\
      +"&origin="+origin\
      +"&destination="+destination\
      +"&origin_region="+origin_region\
      +"&destination_region="+destination_region\
      +"&output="+output\
      +"&ak=GuGZ01jekpjxCa1IGQCDNv608jm48wDt"
 
url = quote(url,safe=string.printable)
req = urllib.request.Request(url)
res = urllib.request.urlopen(req)
 
print (res.read())

有帮助的话,请点采纳~