如何在Python 3中压缩字符串?

7 投票
2 回答
13192 浏览
提问于 2025-04-16 04:51

我不太明白。在2.X版本中,这个是可以工作的:

import zlib
zlib.compress('Hello, world')

现在我有了一个:

zlib.compress("Hello world!")
TypeError: must be bytes or buffer, not str

我该如何压缩我的字符串呢?
祝好,
Bussiere

2 个回答

19

在Python 2.x中,字符串默认是字节串,也就是一串字节。而在Python 3.x中,字符串是Unicode字符串,也就是可以表示多种语言的字符。

进行压缩的时候,需要用到字节串。

20

这段话是为了确保你确实有一个明确的编码方式。

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"

撰写回答