在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)。