当前位置: 首页 > 面试题库 >

Python-将sock.recv转换为字符串

魏君博
2023-03-14
问题内容

我正在研究python和网络。

while True:
   data = sock.recv(10240)

肯定是在听。但这似乎需要转换为文本字符串。

我见过有人使用 struct.unpack() ,但是我不确定它是如何工作的。转换方式是什么?


问题答案:

您从中得到的recv是一个bytes字符串:

从套接字接收数据。返回值是一个字节对象,表示接收到的数据。

在Python
3.x中,要将bytes字符串转换为Unicode文本str字符串,您必须知道该字符串使用什么字符集编码,因此可以调用decode。例如,如果它是UTF-8:

stringdata = data.decode('utf-8')

(在Python 2.x中,bytes它和一样str,因此您已经 有了
一个字符串。但是,如果要获取Unicode文本unicode字符串,则与3.x中的相同。)

人们经常使用的原因struct是数据不仅是8位或Unicode文本,而是其他某种格式。例如,您可以将每个消息作为“
netstring
”发送:长度(作为ASCII数字字符串),后跟一个:分隔符,然后length是UTF-8字节,然后是一个,-如b"3:Abc,"。(格式上有一些变体,但这是伯恩斯坦标准的网络字符串。)

人们使用netstrings或其他类似技术的原因是,在使用TCP时需要某种分隔消息的方法。每个都recv可以给您对方传递的一半send,或者可以让您获得3分send和4分之一。因此,您必须积累一个recv数据缓冲区,然后再将消息拉出。而且,您需要某种方法来告知一条消息何时结束,下一条消息何时开始。如果您只是发送没有任何换行符的纯文本消息,则可以仅使用换行符作为分隔符。否则,您将不得不提出其他建议-
可能是网串,或者\0用作分隔符,或者使用换行符作为分隔符,但在数据中转义了实际的换行符,或者使用某些自定界的结构化格式(例如JSON)。



 类似资料:
  • 问题内容: 我正在使用以下代码从外部程序获取标准输出: 方法返回一个字节数组: 但是,我想将输出作为普通的字符串使用。这样我就可以像这样打印它: 我认为这就是方法的用途,但是当我尝试使用它时,我又得到了相同的字节数组: 如何将字节值转换回字符串?我的意思是,使用”batteries”而不是手动进行操作。我希望它与Python 3兼容。 问题答案: 你需要解码bytes对象以产生一个字符串:

  • 问题内容: 每当我致电时,都会收到以下错误消息: 还有其他方法可以将ElementTree对象转换为XML字符串吗? 追溯: 问题答案: 对象没有方法。挂断该电话,该电话将正常工作: 仅当有实例时才需要使用。 其他说明: 这将产生一个 bytestring ,在Python 3中是该类型。 如果必须有一个对象,则有两个选择: 从UTF-8解码结果字节值: 使用; 这样可以避免编码/解码周期: 如果

  • 问题内容: 我有一个这样的字符元组: 我如何将其转换为字符串,使其类似于: 问题答案: 用途:

  • 问题内容: 有没有人能将不安全的字符串转换为? 该字符串通常回来为:或类似的东西。 在这种情况下,我要。如果我想。我从不希望该方法失败,但是我不愿意尝试,除非通过它只是为了隐藏错误(以防万一发生极端情况)。 问题答案: 在这种情况下,您确实有一种避免/的方法,尽管我不建议这样做(假设您的输入字符串名为,并且您处于必须返回某些内容的函数中): 将在部分就是你回什么是你想要比如说,如果是,空,全空间,

  • 问题内容: 我有一个列表格式,如下所示: 如何转换为包含如下所示元素的列表: 问题答案: 用途: 或使用将其视为JSON : 以Python文字作为输入(因此Python源代码中的文本将为您提供一个值),以JSON输入。 演示: 只有当您的输入字符串中包含多个整数列表时,两者之间的区别才会发挥作用。JSON字符串包含unicode,在Python 2上无法正确解释,并且JSON类型只是支持的一部分

  • 问题内容: 您如何将字符串转换为ASCII值? 例如,“ hi”将返回104105。 我可以单独执行ord(’h’)和ord(’i’),但是在有很多字母的情况下会很麻烦。 问题答案: 您可以使用列表理解: