【问题标题】:compress a string in python 3?在python 3中压缩字符串?
【发布时间】:2010-10-01 12:55:33
【问题描述】:

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

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

现在我有一个:

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

如何压缩我的字符串? 问候 比西耶

【问题讨论】:

标签: python string python-3.x zlib compression


【解决方案1】:

这是为了强制你确实有一个定义的编码。

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"

【讨论】:

  • 好奇:为什么这对我有用(Python 3.0.1,Ubuntu Jaunty)而不调用encode
  • 查看发布文档,此更改可能会在更高版本的 3 中强制执行。
  • 哇,2019 年,这个答案仍然很有帮助。感谢您在多年前发帖。
  • 不客气。如果您的基本实现细节不每隔几年更改一次,那不是很好。 :D
【解决方案2】:

在 python 2.x 中,默认情况下字符串是字节字符串。在 python 3.x 中,它们是 unicode 字符串。

压缩需要一个字节串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多