Socket接收消息前出现'b'的原因及去除方法
问题解答
为什么会出现b标识?
socket.recv(1024)返回的是bytes(字节)类型的数据,这是网络传输中数据的原生格式。Python在打印bytes对象时,会自动添加开头的b和包裹内容的单引号,用来明确标识这是字节数据而非普通字符串——这些符号只是Python对bytes类型的显示形式,并不是实际接收到的消息内容的一部分。
你的代码里虽然调用了word.decode(),但没有把解码后的结果重新赋值给变量,word仍然是原始的bytes对象,所以打印时还是会显示b和引号。
如何去除b及两侧引号?
只需要正确处理解码后的字符串即可,有两种简单方式:
方式1:保存解码后的结果再打印
import socket s = socket.socket() s.connect(('123.456.78.9', 8080)) # 注意connect参数需传入元组,原代码此处存在语法错误 word = s.recv(1024) decoded_word = word.decode() # 将bytes解码为字符串并保存 print(decoded_word)
方式2:直接打印解码结果
import socket s = socket.socket() s.connect(('123.456.78.9', 8080)) word = s.recv(1024) print(word.decode()) # 直接打印解码后的字符串
补充:指定编码格式(推荐)
如果不确定对方发送的编码,建议显式指定编码(比如常用的utf-8),避免因默认编码不一致导致解码错误:
print(word.decode('utf-8'))
内容的提问来源于stack exchange,提问作者Ludicrous
相关产品推荐
相关产品推荐

