python - 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 不能连接成字节有什么帮助吗?
编辑:浏览了建议的帖子,但我没有从中获得任何好处。它看起来如此不同,我对此很陌生,以至于我什至不知道他试图转换的字符串在哪里
解决方案
在 和的情况PASS
下:IDENT
CHANNEL
bytes
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")
在 和的情况PASS
下:IDENT
CHANNEL
str
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')
。
推荐阅读
- python - 基于两个不同的数组创建二维数组
- go - go time.Now() 没有给出适当的时间
- sql - 如何在列 SQL 中查找重复的值集
- javascript - onClick 在重新渲染后第一次单击时不起作用
- python - 批量翻译的 IAM 权限问题:PermissionDenied:403 Cloud IAM 权限“cloudtranslate.generalModels.batchPredict”被拒绝
- bash - Mac Bash 脚本:每 7 的倍数打开一个终端窗口并输入命令
- android - HTML Google Maps API 正在桌面浏览器上加载,但不在 Android 上
- java - Files.isWritable 的意外行为
- arduino - 带有 SIM 900a 的 Arduino - 如何将所有传入消息存储到文本文件中?
- elasticsearch - Elasticsearch 更改主分片数