将输入()转换为Python 3中的字节?

时间:2018-06-23 04:19:59

标签: python python-3.x

自从我开始使用Python 3版本以来,我在通过套接字发送字符串时遇到了很多问题。我知道要在套接字中发送字符串,必须在字符串之前放置'b'才能将其转换为字节。但是,当我必须将input()转换为字节时会发生什么?怎么做?

我需要将用键盘编写的消息发送到套接字:

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost",7500))

msg = input()
client.send(msg) 

但是,当我尝试时,出现以下错误:

TypeError: a bytes-like object is required, not 'str'

有人可以告诉我如何将input()转换为字节吗?我一直使用2.7版,但我不明白为什么3版对套接字的处理如此令人讨厌。 :(

2 个答案:

答案 0 :(得分:2)

为此,您可以使用

import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost",7500))
msg = input()
client.send(msg.encode())

它返回编码为字节对象的字符串。参见str.encode

答案 1 :(得分:2)

您需要encode这样的消息:

msg = input().encode()

在Python 2中不需要这样做的原因是因为unicode字符串是它们自己的类型,但是是in Python 3 all strings are now unicode by default