如何让Python在print语句中使用\r\n换行?

1 投票
2 回答
1711 浏览
提问于 2025-04-18 02:27

现在,我正在编写一个用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 是字节类型,所以你需要把它解码成字符串。

有两种简单的方法可以做到这一点:

  1. print(status.decode())
  2. 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!'"

撰写回答