我在python2中執行套接字通信,它運行良好,我必須使它再次在python3中工作。我有很多格式的str.encode(),但網絡的另一端無法識別我發送的內容。我唯一知道的是,python3 str類型在默認情況下被編碼爲Unicode uft-8,我很確定這裏的關鍵問題是python2 str類型的格式是什麼。我必須發送與python2 str中存儲的內容完全相同的內容。但棘手的是python3的套接字只發送編碼的unicode字節或其他緩衝區接口,而不是str2類型與Python2中的原始數據。這個例子是如下:Python:如何通過Python3中的套接字發送十六進制字符串而不對其進行編碼?
在python2:
data = 'AA060100B155'
datasplit = [fulldata[i: i+2] for i in range(0, len(fulldata), 2)]
senddata = ''
for item in datasplit:
itemdec = chr(int(item, 16))
senddata += itemdec
print(senddata)
#'\xaa\x06\x01\x00\xb1U',which is the data I need
在python3,似乎它只能通過發送編碼的字節「senddata.encode()」,但它不是我想要的格式。你可以試試:
print(senddata.encode('latin-1'))
#b'\xaa\x06\x01\x01\xb2U'
到看到兩個senddatas的差異,一個有趣的事情是,它是錯誤的編碼使用UTF-8時。
存儲在Python3 str類型的數據是我需要的東西,但我的問題是如何發送該字符串的數據而不編碼它?或者如何在Python3中執行相同的str2類型的Python2?
任何人都可以幫助我嗎?
哪裏''ª\ X06 \ X01 \x01²U''從何而來?當我運行你的代碼(在Python 2.6.6中)時,'senddata'的'repr'是''\ xaa \ x06 \ x01 \ x00 \ xb1U''。 –
對不起,是從python3的IDE。對不起,迷惑你 – lwangreen