使用http.client-lib(Python)在GET请求中进行字符编码

使用http.client-lib(Python)在GET请求中进行字符编码,python,utf-8,get,httprequest,python-3.3,Python,Utf 8,Get,Httprequest,Python 3.3,我是python的初学者,编写了这个小脚本以在本地服务器(localhost)上发送HTTP GET请求。它工作得很好,除了我希望我可以发送拉丁字符,如口音 import http.client httpMethod = "GET" url = "localhost" params = "Hello World" def httpRequest(httpMethod, url, params): conn = http.client.HTTPConnection(url) c

我是python的初学者,编写了这个小脚本以在本地服务器(localhost)上发送HTTP GET请求。它工作得很好,除了我希望我可以发送拉丁字符,如口音

import http.client

httpMethod = "GET"
url = "localhost"
params = "Hello World"

def httpRequest(httpMethod, url, params):
    conn = http.client.HTTPConnection(url)
    conn.request(httpMethod, '/?param='+params)
    conn.getresponse().read()
    conn.close()
    return

httpRequest(httpMethod, url, params)
当我在参数“params”中插入带重音的单词时,将显示以下错误消息:

UnicodeEncodeError:“ascii”编解码器无法对位置14中的字符“\xe9”进行编码:序号不在范围内(128)

我不知道是否有使用http.client库的解决方案,但我想是的。当我查看文档http.client时,我可以看到:

HTTPConnection.request


字符串编码为ISO-8859-1,这是HTTP的默认字符集。您不应该手动构造参数。改用:

因此,您可以:

conn.request(httpMethod, '/?' + urlencode({'params': params}))

还要注意,在URL转义之前,yout字符串将被编码为UTF-8。

您不应该手动构造参数。改用:

因此,您可以:

conn.request(httpMethod, '/?' + urlencode({'params': params}))

还要注意,在URL转义之前,您的字符串将被编码为UTF-8。

您需要调用
params.encode('latin-1')
它不起作用,同样的错误。。。其他想法?我想我必须更改我使用的库,但我不想这样做。你需要调用
params.encode('latin-1')
它不起作用,同样的错误。。。其他想法?我想我必须更改我使用的库,但我不想这样做。