2016-11-20 71 views
0

據我所知,我現在總是解碼用戶輸入到我的腳本(Python網絡服務器)。
而且我總是對輸出進行編碼,例如當我通過websocket連接將數據從服務器發送到客戶端時。我應該在json.dumps(...)之後編碼嗎?

我應該做的:

ws.send(json.dumps({'message' : message, 'id': i})) 

ws.send(json.dumps({'message' : message, 'id': i}).encode('utf8')) 

第一似乎確定在Python 2.7,因爲它似乎的json.dumps(...)結果已被編碼:

print type(json.dumps({'message' : message, 'id': i})) 
# <type 'str'> 

問:

我們是否應該.encode('utf8')或不經過json.dumps()

回答

1

通常,通過套接字連接發送和接收的數據是客戶端和服務器之間的握手。客戶端應該發送服務器可以接受的數據,不管它是utf-8還是latin

總之,做任何你喜歡的編碼,但要記住,你的服務器預計相同。

關於你的問題:

我們應該.encode( 'utf-8')或不json.dumps後()?

下面是一個例子:

>>> a = {'a': 'Hello'} 
>>> str_a = json.dumps(a) # type(str_a) --> <class 'str'> 
>>> bytes_a = json.dumps(a).encode('utf8') # type(bytes_a) --> <class 'bytes'> 

允許檢查兩者的存儲器大小:

>>> import sys 
>>> sys.getsizeof(str_a) 
63 
>>> sys.getsizeof(bytes_a) 
47 

克利字節串消耗比正常的字符串存儲器更少。發送編碼數據以減少網絡使用是更好的選擇。對於通過套接字進行的數據傳輸,這是一個需要考慮的主要因素。

相關問題