Could not decode a text frame as UTF-8 的解決
Could not decode a text frame as UTF-8 的解決
我準備用谷歌的protobuf作為前後端通訊的協議。
但是從伺服器傳送Message物件到web的時候爆了這個錯。很奇怪是什麼意思,我明明發的是二進位制資料啊,何來的text。。。。
又去網上找了一下websocket的一些介紹,發現一張圖
websocket的訊息是分片傳送的,每一片的開頭定義了基本的資訊。如這張圖顯示的。第0位0或1表示是不是連續分片的最後一片,123位必須是0,4567四位是一個16進位制數字。這個數字是0代表附加資料,1代表文字,2代表二進位制資料。
原來就是這4位定義了資料格式。。。
回去看socket庫的原始碼,它在開頭寫入了一個數字“129”。這個數字轉成二進位制後“10000001”,果然和網上說的一樣。趕緊改成130(10000002),從新試了一下
不報錯了,破費!
def send_img(msg,data_length): send_msg = b"" # 使用bytes格式,避免後面拼接的時候出現異常 send_msg += b"\x82" back_str = [] back_str.append('\x81') data_length = len(msg) # 可能有中文內容傳入,因此計算長度的時候需要轉為bytes資訊 # if PRINT_FLAG: print("INFO: send message len is %d" % (data_length)) # 資料長度的三種情況 if data_length <= 125: # 當訊息內容長度小於等於125時,資料幀的第二個位元組0xxxxxxx 低7位直接標示訊息內容的長度 send_msg += str.encode(chr(data_length)) elif data_length <= 65535: # 當訊息內容長度需要兩個位元組來表示時,此位元組低7位取值為126,由後兩個位元組標示資訊內容的長度 send_msg += struct.pack('b', 126) send_msg += struct.pack('>h', data_length) elif data_length <= (2 ^ 64 - 1): # 當訊息內容長度需要把個位元組來表示時,此位元組低7位取值為127,由後8個位元組標示資訊內容的長度 send_msg += struct.pack('b', 127) send_msg += struct.pack('>q', data_length) else: print(u'太長了') send_message = send_msg+msg global conn_dict_face if conn_dict_face: print('has conn********************') for connection in conn_dict_face.values(): if send_message != None: try: print("send") #if not connection._closed: timestr = datetime.datetime.now().strftime('%H:%M:%S:%f') log_info(timestr, 'send_message_test') connection.send(send_message) except Exception as e: log_info('send error', e) connection.close() else: log_info("msg_test is none")
相關文章
- Sublime text 2/3 [Decode error - output not utf-8] 完美解決方法Error
- Sublime Text: [Decode error - output not utf-8]Error
- Sublime Text 2報 Decode error - output not utf-8 錯誤的解決辦法Error
- Sublime Text 2報“Decode error - output not utf-8”錯誤的解決辦法Error
- Sublime Text 2/3 [Decode error - output not utf-8]Error
- 使用 Sublime 工具時報Decode error - output not utf-8解決辦法Error
- sublime Text3編譯java檔案提示Decode error - output not utf-8編譯JavaError
- 用sublime Text3編譯java檔案提示Decode error - output not utf-8編譯JavaError
- sublime上配置java環境,解決Decode error - output not utf-8問題JavaError
- Sublime下python 報錯[Decode error - output not utf-8]解決辦法PythonError
- Sublime報Decode error - output not utf-8 or cp936 錯誤的解決辦法Error
- sublime text編譯時提示錯誤[Decode error - output not utf-8] compilation terminated編譯Error
- sublime 出現 [Decode error - output not utf-8]Error
- cx_Oracle.DatabaseError: [Decode error - output not utf-8]OracleDatabaseError
- [Decode error - output not utf-8] lua 使用string.subError
- Could not find *.apk!解決辦法APK
- Many To Many could not initialize proxy – no Session的解決方法Session
- python編碼問題之——Decode error - output not utf-8PythonError
- 解決"Could not reserve enough space for object heap"Object
- PHP中的Malformed UTF-8 characters錯誤解決PHPORM
- 字串的encode與decode解決亂碼問題字串
- Go:錯誤 could not launch process: EOF 解決Go
- Could not find jar tool executable問題解決JAR
- jar檔案could not find the main class解決JARAI
- PRVF-0002Could not retrieve local nodename的解決方法
- 解決NSData中包含非法UTF-8編碼
- 詳解iframe與frame的區別
- Sublime Text 3 中文亂碼問題的解決
- mysql中出現Unit mysql.service could not be found 的解決方法MySql
- Python——Output not utf-8錯誤解決辦法Python
- Ant編譯utf-8非法字元:/65279 解決方法編譯字元
- 解決text-overflow: ellipsis;不生效的問題
- 關於 artisan migrants Could not find drive 解決方法
- Android: The following classes could not be instantiated: 解決方法Android
- Could not resolve host: 'localhost 報錯解決辦法localhost
- table表格中text-overflow失效解決方案
- docker 容器指定utf-8編碼,解決中文亂碼Docker
- json_decode詳解JSON