用于编码和解码netstring的模块。

pynetstring的Python项目详细描述


用于编码和解码netstring的模块。查看netstring的定义 在https://cr.yp.to/proto/netstrings.txt

要求

pynetstring是为python 3编写的。

用法

编码

netstring_bytes = pynetstring.encode('Hello')
# Will give b'Hello'
print(netstring_bytes)

解码

在最简单的情况下,当我们确定我们试图 在netstring边界上解码结束我们可以简单地做:

# data_list will be an list of bytes.
decoded_list = pynetstring.decode('5:Hello,6:World!')
# Will give [b'Hello', b'World!']
print(decoded_list)

然而,在许多情况下,例如当netstring数据通过网络传输时, 到达的数据块可能与netstring边界不对齐。 例如,一个数据块可能包含一个netstring,然后是下一个的一部分。 要处理此问题,请调用decoder.feed(),它将缓冲和解析数据并 在完全接收到解码数据后立即发出。

decoder = pynetstring.Decoder()
# Will give []
print(decoder.feed('5:He'))
# Will give [b'Hello', b'World!']
print(decoder.feed('llo,6:World!,5:ag'))
# Will give [b'again']
print(decoder.feed('ain,'))

接收端可能是这样的:

decoder = pynetstring.Decoder()

def handle_network_data(data):
  decoded_list = decoder.feed(data)
  for item in decoded_list:
      print(item)

数据编码

无论发送到encode()的数据类型如何,它都将始终 返回二进制数据,即python字节。decode()返回的数据 decoder.feed()也是二进制的。这是因为解码器不能 对原始数据的编码做任何假设。如果你知道的话 输入的数据可以用特定的方式或编码来解释, 例如,utf-8,您必须显式地进行转换。

encoded = pynetstring.encode(u'Hello World!')
# This will be <class 'bytes'>
print(type(encoded))
decoded_list = pynetstring.decode(encoded)
# This will be <class 'bytes'>
print(type(decoded_list[0]))
# This will return the original unicode string u'Hello World!'
print(decoded_list[0].decode('utf-8'))

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Gson类中的java验证错误   If和elseif之间的java差异?   字典Java8地图。输入比较器   java连接到远程计算机以获得WMI支持   java如何使用改型处理JSON对象中的空值   在Java中使用Comparator时不可编译的源代码   java将Jar添加到JSP的运行时路径   带有随机对象的while循环的java大O时间复杂性   java可以在不考虑参数的情况下模拟方法吗?   java我有一个简单的代码,它不工作。无法修复错误“println”   向eclipse添加Xively java库   java是否可以启用本机代码的缓存?   全局变量如何在Java中的所有类之间共享要使用的语言环境?   Java内存游戏如何翻转单个卡?