最近再写一个中英互译的网站,用的是金山词霸的api。
抄着另一个大佬的博客写了英译中,但是用同样的方式请求中译英的结果时报错,代码如下:
def ch_to_en(q, species="json"):
myurl = "/api/dictionary.php?w=" + q + "&type=" + species + "&key=54A9DE969E911BC5294B70DA8ED5C9C4" # 开发者Key
print(myurl)
try:
httpClient = http.client.HTTPConnection('dict-co.iciba.com')
httpClient.request('GET', myurl)#到这一步报错
# response是HTTPResponse对象
response = httpClient.getresponse() # 获取返回结果
result = json.loads(response.read().decode("utf-8"))
except Exception as e:
print(e)
finally:
if httpClient:
httpClient.close()
if __name__ == "__main__":
ch_to_en("你好")
报错如下:
'ascii' codec can't encode characters in position 26-27: ordinal not in range(128)
网上对这个错误的解决方法有很多,但是我都试了一遍,然而都失败了。
仔细分析这句话是说ascii不能编解码这些字符(中文)。
我还尝试查找如何使用扩展ascii编解码,但是总觉得方向有些南辕北辙了。
避免问题的方法如下,使用requests.get():
def ch_to_en(q, species="json"):
myurl = "http://dict-co.iciba.com/api/dictionary.php?w=" + q + "&type=" + species + "&key=54A9DE969E911BC5294B70DA8ED5C9C4" # 开发者Key
print(myurl)
try:
r = requests.get(myurl)
if r.status_code == 200:
print('success')
except Exception as e:
print(e)
if __name__ == "__main__":
ch_to_en("解释")
返回success
我猜想可能源码有些不同,但水平有限,不能够找到具体原因。如果有大佬知道原因,麻烦补充一下~