首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Opera Turbo如何压缩数据(缓存)?

Opera Turbo如何压缩数据(缓存)?
EN

Stack Overflow用户
提问于 2011-08-01 00:02:27
回答 2查看 2.5K关注 0票数 2

我有一个启用了"Opera Turbo“的Opera浏览器。它是一个代理,可以将HTML重新压缩成更小格式。我有一个来自opera缓存的文件,它被turbo从2000kb压缩到500kb。如何将这个文件解压缩成可读的形式(原始文件几乎没有html标签,只有8位文本、"<p>“标签和html页眉/页脚)?

以下是此类文件的示例:

代码语言:javascript
复制
.opera$ hexdump -C cache/turbo/g_0000/opr00003.tmp
00000000  78 da 6c 8f bf 4e c4 30  0c c6 67 fa 14 26 48 6c  |xзl▐©Nд0.фgЗ.&Hl|
00000010  a1 1c 12 d3 25 1d f8 37  82 54 f1 02 69 63 48 74  |║..с%.Ь7┌TЯ.icHt|
00000020  69 52 12 97 d2 b7 ed 88  40 80 b8 05 06 06 7a 57  |iR.≈р╥М┬@─╦...zW|
00000030  09 21 84 27 fb f3 cf 9f  6d 61 a8 71 45 26 0c 2a  |.!└'ШСо÷ma╗qE&.*|
00000040  5d 64 3b a2 41 52 60 88  5a 8e 77 9d bd 97 ec 34  |]d;╒AR`┬Z▌w²╫≈Л4|
00000050  78 42 4f fc 7a 68 91 41  3d 57 92 11 3e 50 be 99  |xBOЭzh▒A=W▓.>P╬≥|
00000060  5d 42 6d 54 4c 48 b2 b7  5e 87 3e f1 c5 d1 f1 82  |]BmTLH╡╥^┤>ЯеяЯ┌|
00000070  fd 78 79 d5 a0 64 1a 53  1d 6d 4b 36 f8 5f 26 ef  |Щxyу═d.S.mK6Ь_&О|
00000080  eb 71 fd f5 f8 97 5d e1  d0 87 a8 d3 ff 20 59 72  |КqЩУЬ≈]Ап┤╗сЪ Yr|
00000090  58 94 5d 4a 56 41 f0 40  06 e1 12 09 f6 1b ad 92  |X■]JVAП@.А..Ж.╜▓|
000000a0  59 c2 8c 8a 7c e6 32 91  cf 9f 09 67 fd 0a 22 3a  |Yб▄┼|Ф2▒о÷.gЩ.":|
...

这是原始文件的一部分(我不确定它是否是真正的原始文件,但很可能是):

代码语言:javascript
复制
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <meta name="description" content="статьи">
    <meta name="keywords" content="статьи">
    <title>Russia on the Net &mdash; статьи</title>
</head>
<link rel="stylesheet" href="/rus/style.css">
<body bgcolor="#FFFFFF">
<center>
...

压缩文件大小为3397,原始大小约为8913字节。原始文件可通过bzip2压缩到3281字节;通过gzip压缩到3177字节;通过lzma压缩到2990字节;通过7z压缩到3082字节;通过zip压缩到3291字节。

更新:我有信息(来自chrome opera-mini扩展http://ompd-proxy.narod.ru/distrib/opera_mini_proxy.crx -用7-zip解压它) opera mini使用它来解压数据webodf/src/core_RawInflate.js这个文件能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-05 03:58:50

前两个字节的78 DA是在deflate compressed data之前的有效的双字节zLib header (参见关于CMF和FLG的第2.2节)。因此,可以使用zLib/deflate压缩该文件。

对于第一个快速测试,您可以使用我的命令行工具Precomp,如下所示:

代码语言:javascript
复制
precomp -v -c- -slow opr00003.tmp

它将报告zLib压缩流以及它们被解压缩的大小("...可以解压缩到...字节“)。如果成功(返回的解压缩大小接近于您知道的原始文件大小),请使用您最喜欢的编程语言和zLib library来解压缩数据。

还要注意,如果你幸运的话,流(或其中的一部分)可以被Precomp逐位地重新压缩,并且输出文件opr00003.pcf包含(一部分)前面有一个小标题的解压缩数据。

编辑:正如osgx评论和进一步分析显示的那样,数据不能使用zLib/deflate解压,所以这仍然是一个未解决的案例

EDIT2:更新,特别是linked JS,显示它的 deflate,但它似乎是一些自定义变体。与original code的比较以及与原始zLib源代码的比较可能会有所帮助。

此外,JS代码当然可以用来尝试解压缩数据。它似乎不能处理2个字节的头文件,所以可能必须跳过这些文件。

票数 5
EN

Stack Overflow用户

发布于 2011-08-05 05:38:26

opera turbo缓存中有不同的文件类型。第一个是有问题的;一些文件是解压的(css和js),还有Z压缩的多文件tar-like图像归档文件( VP8,由纯文本RIFF、WEBP、VP8 magics检测到):

代码语言:javascript
复制
 5a 03 01 1c 90 02 0a 22 03 18 2a (RIFF data first img) (RIFF data second img)
 (RIFF data third img)

RIFF容器是清晰可见的,并且它有长度字段,所以我建议这样描述:

代码语言:javascript
复制
 5a - magic of format
    03 - number of files
       01 - first file (riff size=0x1c90)
          1c 90 - big-endian len of first file
                02 - second file (riff size=0a22)
                   0a 22 - len of second file
                         03 - third file (riff size=182a)
                            18 2a
                                  52 49 46 46 == "RIFF" magic of first file

另一个使用jpeg的Z文件示例("JFIF“魔术可见,ffd8ff jpeg-marker不可见;内部有8个文件):

代码语言:javascript
复制
0000000: 5a08 0118 de02 1cab 0308 0804 162c 0531  Z............,.1
0000010: 4d06 080f 070a 4608 0964"ffd8 ffe0 0010  M.....F..d......
0000020: 4a46 4946 0001 0101 0060 0060 0000 ffdb  JFIF.....`.`....

另一种检测到的(由file)类型的文件是"<000"-file,其示例头为(十六进制)“1f8b0800 000000002ff ec52cb6a c3 3010fc1563”。file说它是"gzip compressed data, max compression",它可以被任何gzip解压。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6890544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档