How do I encode a string to bytes in the send method of a socket connection in one line?

落爺英雄遲暮 提交于 2019-12-17 16:31:42

问题


In Python 3.5, using sockets, I have:

message = 'HTTP/1.1 200 OK\nContent-Type: text/html\n\n'
s.send(message.encode())

How can I do that in one line? I ask because I had:

s.send('HTTP/1.1 200 OK\nContent-Type: text/html\n\n')

but in Python 3.5 bytes are required, not a string, so this gives the error:

builtins.TypeError: a bytes-like object is required, not 'str'

Should I not be using send?


回答1:


str, the type of text, is not the same as bytes, the type of sequences of eight-bit words. To concisely convert from one to the other, you could inline the call to encode (just as you could with any function call)...

s.send('HTTP/1.1 200 OK\nContent-Type: text/html\n\n'.encode())

.. bearing in mind that it's often a good idea to specify the encoding you want to use...

s.send('HTTP/1.1 200 OK\nContent-Type: text/html\n\n'.encode('ascii'))

... but it's simpler to use a bytes literal. Prefix your string with a b:

s.send(b'HTTP/1.1 200 OK\nContent-Type: text/html\n\n')

But you know what's even simpler? Letting someone else do HTTP for you. Have you thought about using a server such as Flask, or even the standard library, to build your app?




回答2:


Use this:

s.send(b'your text')

Adding b in front of a string will convert it to bytes.




回答3:


Putting a b or B before an opening quote will change a str literal to a bytes literal:

s.send(b'HTTP/1.1 200 OK\nContent-Type: text/html\n\n')


来源:https://stackoverflow.com/questions/35092256/how-do-i-encode-a-string-to-bytes-in-the-send-method-of-a-socket-connection-in-o

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!