Python 3.8 TypeError:无法将str连接到字节TypeError:需要类似byteslike的对象,而不是“str”

2024-09-25 08:28:49 发布

您现在位置:Python中文网/ 问答频道 /正文

非常新的编码。这是我试图运行的最初代码,但发现它与Python3不兼容,因为它处理字符串和字节的方式

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不能连接成字节 有什么帮助吗

编辑:浏览了推荐的帖子,但我没有从中得到任何收获。它看起来很不一样,我对它是如此陌生,以至于我都不知道他想转换的字符串在哪里


Tags: 字符串sendhost字节portdefconnectchannel
1条回答
网友
1楼 · 发布于 2024-09-25 08:28:49

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')

相关问题 更多 >