使用utf-8的BaseHTTPServer.BaseHTTPRequestHandler问题

时间:2015-09-02 13:40:30

标签: python html encoding utf-8

我对“BaseHTTPServer.BaseHTTPRequestHandler”响应中HTML中显示的文字有疑问。 HTML页面接收带有utf-8字符的字符串值,并将其显示在文本框中,但utf-8字符是可见的。 该值保存在xml文件中,格式如下:[id="tx_alterneteducationcatalog_subscriberadd[newSubscriber]\a[gender]-error"] ,由python脚本读取,并在页面中使用以下URL调用:

[15-09-02 10:16:45] Testing%2Bthe%2Bcomments%2Bpage

但是,html页面在文本框中显示以下文字:

htt://URL/Comments?group=BLABLA&unit=YUO&info=[15-09-02 10:16:45] Testing%2Bthe%2Bcomments%2Bpage&another=

在不删除特殊字符的情况下,我在字符串中尝试了encode()。decode(),但没有任何效果。有人有什么想法吗? 用于创建网络服务器的代码:

[15-09-02 10:16:45] Testing%2Bthe%2Bcomments%2Bpage

返回html页面的函数:

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_HEAD(s):
    s.send_response(200)
    s.send_header("Content-type", "text/html")
    s.end_headers()
def do_GET(s):
    """Respond to a GET request."""
    s.send_response(200)
    s.send_header("Content-type", "text/html")
    s.end_headers()
    if("/Comments" in s.path):
        strServer = "http://" + HOST_NAME + ":" + str(PORT_NUMBER) + "/SaveComments";
        strUrl = s.path;
        s.wfile.write(CommentsPage.IndexPage(strUrl, strServer));
    elif("/SaveComments" in s.path):
        s.wfile.write(CommentsPage.SaveComments(s.path));
    else:
        s.wfile.write(CommentsPage.ErrorPage());
if __name__ == '__main__':
    server_class = BaseHTTPServer.HTTPServer
    httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
    print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    httpd.server_close()
    print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)

2 个答案:

答案 0 :(得分:0)

这与UTF-8没有任何关系。这不是任何类型的字符集"编码",而只是URL转义。

您可以使用urllib.parse.unquote(Python 3)或urllib.unquote(Python 2)来取消数据。

答案 1 :(得分:0)

真的,解决方案是urllib.unquote。当url保存在xml文件中之前,必须使用urllib.quote(url)进行格式化,并且在第一次从文件中读取它时必须使用urllib.unquote(read_url)格式化。但是,空格被“+”符号替换,函数string.replace()解决了这个问题。谢谢你的帮助!