如何让Python在print语句中使用\r\n换行?
现在,我正在编写一个用Python写的SMTP脚本。
status = clientSocket.recv(1024)
print (status)
当Python打印出status
时,我得到的是:
b'250-mx.google.com at your service, [107.216.175.252]\r\n250-SIZE 35882577\r\n250-8BITMIME\r\n250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN\r\n250-ENHANCEDSTATUSCODES\r\n250 CHUNKING\r\n'
但是,我希望Python能把\r\n
转换成实际的换行,而不是把它当成一整行打印出来。我该怎么做呢?
2 个回答
2
>>> print(status.decode())
250-mx.google.com at your service, [107.216.175.252]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
250-ENHANCEDSTATUSCODES
250 CHUNKING
你正在使用Python 3,它默认使用的是unicode编码,但你有一个旧式的字节字符串,这是因为你在做网络编程时产生的。你只需要用decode
方法把它转换一下,然后用print
输出时,就会像往常一样去掉换行符的表示。
3
status
是字节类型,所以你需要把它解码成字符串。
有两种简单的方法可以做到这一点:
print(status.decode())
print(str(status, 'utf-8'))
.decode
的默认编码是 UTF-8,所以如果你想用其他编码,可以这样写 status.decode(encoding)
。而 status.decode(encoding)
和 str(status, encoding)
是完全一样的。
为什么 str(status)
不起作用:
根据 str 函数的文档:
如果不提供编码或错误处理参数,直接把字节对象传给 str(),会返回一个非正式的字符串表示。比如:
>>> str(b'Zoot!')
"b'Zoot!'"