Python中b'some string'的变量等价物是什么
我想知道有没有什么简单的方法可以把一个字符串变量变成字节串,就像用 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
值)。