Python中b'some string'的变量等价物是什么

-2 投票
1 回答
2338 浏览
提问于 2025-04-18 10:55

我想知道有没有什么简单的方法可以把一个字符串变量变成字节串,就像用 b'some string' 这样。之前我试过用 b(somevar),但不管用。看到有一些转换成字节数组的函数,但我不确定这样做是不是太复杂了,因为对于字面字符串来说,简单地在字符串前加个 b 就可以了。

我的最终目标是使用字符串来进行telnet连接。比如说,我可以用 b'ehlo a.com' 来简单地发送一个请求。但如果我把 'ehlo a.com' 存储在一个字符串变量里,我该怎么用它呢?

代码:

writestring = 'RCPT TO: postmaster@'+domains[domain]
bytesdata = writestring.encode('ascii')
tn.write(writestring)

错误:

Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1487, in __call__
    return self.func(*args)
  File "C:\Users\kylec\Desktop\DataMotion\Python\MailChecker.py", line 108, in checkMail
    tn.write(writestring)
  File "C:\Python34\lib\telnetlib.py", line 289, in write
    if IAC in buffer:
TypeError: 'in <string>' requires string as left operand, not bytes

1 个回答

2

b'..'这种写法是创建一个bytes对象的方式,就像用普通字符串写法可以创建一个str对象一样。bytes用来存储二进制数据,而str用来存储文本数据,文本数据是以Unicode编码的。

如果你想从一个文本(Unicode)字符串创建一个bytes对象,你需要用某种编码方式来编码你的Unicode数据。具体用什么编码,取决于你想用这个二进制数据来做什么。

bytesdata = unicodestring.encode('utf-8')

比如,这样做会把文本编码成UTF-8格式的字节。

EHLO是一个RFC 2821 SMTP命令,它只使用ASCII编码,所以在这里你可以直接编码成ASCII

unicodestring.encode('ascii')

从你的错误追踪信息中可以看到的相关源代码,可以看出这里需要一个bytes类型的值(IAC就是一个bytes)。

撰写回答