python中可变等效的b'some字符串'

时间:2014-06-24 17:53:59

标签: python python-3.x byte

使用字符串变量执行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

1 个答案:

答案 0 :(得分:2)

b'..'文字表示法只是创建bytes对象的一种方法,就像使用常规字符串文字创建str对象一样。 bytes保存二进制数据,而str保存 text 数据作为Unicode代码点。

如果您尝试从文本(unicode)字符串创建bytes对象,则需要使用某些编解码器编码您的Unicode数据。完全相同的编解码器取决于您使用二进制数据 所需的内容。

bytesdata = unicodestring.encode('utf-8')
例如,

会将文本编码为UTF-8字节。

EHLORFC 2821 SMTP commanduses ASCII codepoints only,因此您可以在此处编码为ASCII

unicodestring.encode('ascii')

通过追溯中的relevant source code,您可以看到预期bytes值(IAC is a bytes value)。