Python 3.8 TypeError:无法将str转换为字节-TypeError:需要类似字节的对象,而不是'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')