簡體   English   中英

Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 'str'

[英]Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 'str'

對編碼非常陌生。 這是我試圖運行的初始代碼,但發現它與 python 3 不兼容,因為它處理字符串和字節的方式。

def opensocket():
     s = socket.socket()
     s.connect((HOST,PORT))
     s.send("PASS " + PASS + "\r\n")
     s.send("NICK " + IDENT + "\r\n")
     s.send("JOIN #" + CHANNEL + "\r\n")
     return s

我想我需要將這些字符串編碼為字節,但我嘗試過的所有轉換方法都給出了錯誤。 這是我嘗試過的一些。

def opensocket():
     s = socket.socket()
     s.connect((HOST,PORT))
     s.send(b"PASS " + PASS + "\r\n")
     s.send(b"NICK " + IDENT + "\r\n")
     s.send(b"JOIN #" + CHANNEL + "\r\n")

def opensocket():
     s = socket.socket()
     s.connect((HOST,PORT))
     s.send("PASS " + PASS + "\r\n".encode())
     s.send("NICK " + IDENT + "\r\n".encode())
     s.send("JOIN #" + CHANNEL + "\r\n".encode())
     return s

這兩個都給出錯誤說 str 不能連接成字節有什么幫助嗎?

編輯:瀏覽了建議的帖子,但我沒有從中獲得任何好處。 它看起來如此不同,我對此很陌生,以至於我什至不知道他試圖轉換的字符串在哪里

PASSIDENTCHANNELbytes的情況下:

def opensocket():
     s = socket.socket()
     s.connect((HOST,PORT))
     s.send(b"PASS " + PASS + b"\r\n")
     s.send(b"NICK " + IDENT + b"\r\n")
     s.send(b"JOIN #" + CHANNEL + b"\r\n")

PASSIDENTCHANNELstr的情況下:

def opensocket():
     s = socket.socket()
     s.connect((HOST,PORT))
     s.send(b"PASS " + PASS.encode('ascii') + b"\r\n")
     s.send(b"NICK " + IDENT.encode('ascii') + b"\r\n")
     s.send(b"JOIN #" + CHANNEL.encode('ascii') + b"\r\n")

了解您使用的協議以及實際使用的編碼非常重要。 'ascii'是一個安全的選擇,但這意味着你只能使用 ASCII 字符,所以如果協議實際上指定了 UTF-8 字符串,你應該.encode('utf-8')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM