使用字符串变量执行b'some string'
的最佳等效方法是什么?我试过了b(somevar)
,但这不起作用。我看到了一些字节数组函数,但是我不确定它是否过于复杂,因为文字字符串放置在字符串前面的简单b
就足够了。
最终目标,在我投票结束之前没有结束大声笑,是使用字符串进行telnet连接。对于简单的写入,我可以b'ehlo a.com'
为例。但如果我说'ehlo a.com'
存储为字符串var,我该如何使用它?
代码:
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
答案 0 :(得分:2)
b'..'
文字表示法只是创建bytes
对象的一种方法,就像使用常规字符串文字创建str
对象一样。 bytes
保存二进制数据,而str
保存 text 数据作为Unicode代码点。
如果您尝试从文本(unicode)字符串创建bytes
对象,则需要使用某些编解码器编码您的Unicode数据。完全相同的编解码器取决于您使用二进制数据 所需的内容。
bytesdata = unicodestring.encode('utf-8')
例如,会将文本编码为UTF-8字节。
EHLO
是RFC 2821 SMTP command,uses ASCII codepoints only,因此您可以在此处编码为ASCII
:
unicodestring.encode('ascii')
通过追溯中的relevant source code,您可以看到预期bytes
值(IAC
is a bytes
value)。