在Python 3中将input()转换为字节?

Convert input () to bytes in Python 3?

本问题已经有最佳答案,请猛点这里访问。

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

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

1
2
3
4
5
6
7
import socket

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

msg = input()
client.send(msg)

但是,当我尝试它时,我收到以下错误:

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

有人能告诉我如何将input()转换为字节吗? 我总是使用2.7版本,我不明白为什么版本3对套接字的处理非常恼火。:(


您需要encode这样的消息:

1
msg = input().encode()

您不需要在Python 2中执行此操作的原因是因为unicode字符串是他们自己的类型,但是在Python 3中,默认情况下所有字符串现在都是unicode。


为此,您可以使用

1
2
3
4
5
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost",7500))
msg = input()
client.send(msg.encode())

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