【python3报错回避】httpClient.request('GET', url)和requests.get(url)针对中文参数的返回

最近再写一个中英互译的网站,用的是金山词霸的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

 

我猜想可能源码有些不同,但水平有限,不能够找到具体原因。如果有大佬知道原因,麻烦补充一下~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值