OpenStack 介面開發中response.body的中文編碼問題

CL.TANG發表於2016-10-18
Contents [hide]

問題的引入=

G在我們建立虛擬機器的時候,會設定虛擬機器的名稱,描述,如果沒有限制使用者輸入,使用者可以輸入中文,會在頁面呈現出亂碼顯示。

解決辦法

使用者限制輸入中文

部分可行,但在使用者自定義,如主機描述等必須可以輸入中文的情況不適合。

不限制使用者輸入,呈現上修改

原來的實現方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
try:   
            response = httpclient.fetch(url,method=method, headers = headers)
        except Exception, e:
            return {"code":e.code}
        #{"hypervisors": [{"id": 1, "hypervisor_hostname": "node-7.domain.tld"}]}
 
        body = eval(response.body.replace("null", "None")).get("servers")
        servers = {}
        for b in body:
            print "*"*50
            ip_keys =  b["addresses"].keys()
            try:   
                for ip_key in ip_keys:
                    for address_ip in b["addresses"][ip_key]:
                        if address_ip["OS-EXT-IPS:type"] == "fixed":
                            print address_ip["addr"]
                            b.update({"ip_addr":address_ip["addr"]})
                            raise ValueError
            except:
                continue
        all_servers = {"servers":body}
        return all_servers

本身eval函式是有使用風險的。修改方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
try:   
            response = httpclient.fetch(url,method=method, headers = headers)
        except Exception, e:
            return {"code":e.code}
        #{"hypervisors": [{"id": 1, "hypervisor_hostname": "node-7.domain.tld"}]}
 
        #body = eval(response.body.replace("null", "None")).get("servers")
        body = json.loads(response.body)["servers"]
        servers = {}
        for b in body:
            print "*"*50
            ip_keys =  b["addresses"].keys()
            try:   
                for ip_key in ip_keys:
                    for address_ip in b["addresses"][ip_key]:
                        if address_ip["OS-EXT-IPS:type"] == "fixed":
                            print address_ip["addr"]
                            b.update({"ip_addr":address_ip["addr"]})
                            raise ValueError
            except:
                continue
        all_servers = {"servers":body}
        return all_servers

可以顯示正常的中英文。然後在必須使用英文的地方加上輸入限制。

相關文章