在Python3中压缩字符串?

在Python3中压缩字符串?,python,string,python-3.x,zlib,compression,Python,String,Python 3.x,Zlib,Compression,我不明白 在2.X中,它起了作用: import zlib zlib.compress('Hello, world') 现在我有一个: zlib.compress("Hello world!") TypeError: must be bytes or buffer, not str 如何压缩我的字符串? 当做 Bussiere这意味着强制要求您实际拥有已定义的编码 zlib.compress("Hello, world".encode("utf-8")) b'x\x9c\xf3H\xcd\x

我不明白 在2.X中,它起了作用:

import zlib
zlib.compress('Hello, world')
现在我有一个:

zlib.compress("Hello world!")
TypeError: must be bytes or buffer, not str
如何压缩我的字符串? 当做
Bussiere

这意味着强制要求您实际拥有已定义的编码

zlib.compress("Hello, world".encode("utf-8"))
b'x\x9c\xf3H\xcd\xc9\xc9\xd7Q(\xcf/\xcaI\x01\x00\x1b\xd4\x04i'
zlib.compress("Hello, world".encode("ascii"))
b'x\x9c\xf3H\xcd\xc9\xc9\xd7Q(\xcf/\xcaI\x01\x00\x1b\xd4\x04i'
否则,同一字符串可以描述不同的字节序列。但它实际上是一个字节序列,将由zlib编码

>>> zlib.compress("Hello, wørld".encode("utf-16"))
b'x\x9c\xfb\xff\xcf\x83!\x95!\x07\x08\xf3\x19t\x18\x14\x18\xca\x19~0\x14\x01y)\x0c\x00n\xa6\x06\xef'
>>> zlib.compress("Hello, wørld".encode("utf-8"))
b"x\x9c\xf3H\xcd\xc9\xc9\xd7Q(?\xbc\xa3('\x05\x00#\x7f\x05u"

在Python2.x中,默认情况下字符串是字节字符串。在Python3.x中,它们是unicode字符串


压缩需要一个字节字符串。

压缩总是对字节序列有效,但您需要首先转换为字节序列(即,选择字符的字节编码)。好奇的可能重复:为什么这对我(Python 3.0.1,UbuntuJaunty)有效而不调用
encode
?检查发布文档,这一变化可能会在2019年3.Wow的更高版本中实施,这个答案仍然很有用。谢谢你这么多年前的发帖。不客气。如果您的基本实施细节不每隔几年更改一次,这不是很好吗D