3

我正在尝试安装此库以进行LZJB压缩。PyLZJB 链接

该库是一个 C 库的绑定,该文件位于此处PyLZJB.so


不幸的是,通过在导入时复制到站点包目录,我得到“错误的 ELF 类”错误

>>> import PyLZJB
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: ./PyLZJB.so: wrong ELF class: ELFCLASS32

帮助会很棒。:)

PS:我正在运行 Ubuntu 10.4 64bit


编辑:

如果有人可以建议我一种替代压缩算法,我会同样高兴。:)

该算法用于HTML 压缩,它也需要客户端Javascript 解压缩/压缩支持

我真的希望有人可以帮助解决这个问题。多谢你们!

4

3 回答 3

7

您正在运行 64 位 Python 解释器并尝试加载 32 位扩展,这是不允许的。

您需要为相同的架构编译 Python 解释器和扩展。虽然您可以获得 32 位 Python 解释器,但获得 64 位扩展可能会更好。

您应该做的是获取LZJB的源代码并自己构建它以获得 64 位共享对象。

于 2010-07-27T22:38:41.303 回答
4

如果有人可以建议我一种替代压缩算法,我会同样高兴。

总是有很好的旧放气,LZ 压缩系列中更常见的成员。JavaScript 实现如何使用 Python 的 zlib 模块处理原始的 deflate 内容

在相对较慢的客户端代码中压缩提交数据会产生大量开销,并且提交您将从中获得的原始字节并非易事。

他们在请求中使用 Gzip GET 参数吗?

查询字符串中的 GET 表单提交本质上必须相当短,否则您将超出浏览器或服务器 URL 长度限制。压缩这么小的东西是没有意义的。如果您有大量数据,则需要以 POST 形式发送。

即使在 POST 形式中,默认值enctype也是application/x-www-form-urlencoded,这意味着大多数字节将被编码为%nn序列。这将使您的表单提交膨胀,可能超出原始未压缩的大小。要提交原始字节,您必须使用enctype="multipart/form-data"表单。

即使那样,您也会遇到编码问题。JS 字符串是 Unicode 而不是字节,将使用包含表单的页面的编码进行编码。这通常应该是 UTF-8,但是您实际上不能通过对其进行编码来生成用于上传的任意字节序列,因为许多字节序列在 UTF-8 中无效。您可以通过将每个字节编码为 UTF-8 的代码单元来获得 Unicode 中的字节,但这会使您的压缩字节膨胀 50%(因为超过 的一半代码单元0x80将编码为两个 UTF-8 字节) .

从理论上讲,如果您不介意失去适当的国际化支持,您可以将页面作为 ISO-8859-1 提供,并使用该escape/encodeURIComponent惯用语在 UTF-8 和 ISO-8859-1 之间进行转换以进行输出。但这行不通,因为浏览器撒谎并且实际上使用 Windows 代码页 1252 来编码/解码标记为 ISO-8859-1 的内容。您可以使用另一种将每个字节映射到一个字符的编码,但这会产生更多的手动编码开销,并且会进一步限制您可以在页面中使用的字符。

您可以通过使用 base64 之类的东西来避免编码问题,但同样,您会获得更多的手动编码性能开销和 33% 的膨胀。

总而言之,所有方法都不好。我不认为你会从中得到多大用处。

于 2010-07-27T23:40:58.743 回答
0

您可以运行 32 位 Python 或编译自己的 PyLZJB,而不是使用预构建的二进制文件。或者从某个地方获取 64 位二进制 PyLZJB。

于 2010-07-27T22:38:05.887 回答