无损压缩方法,用于在进行Base64编码之前缩短字符串长度?

13

我刚刚构建了一个小型网页应用程序,用于预览HTML文档,生成包含base64编码数据的HTML(以及所有内联CSS和JavaScript)的URL。问题是,这些URL很快就变得有点长。有没有"事实上"标准的方式(最好使用Javascript)可以在不丢失数据的情况下先压缩字符串?

附:我之前在学校里读过Huffman和Lempel-Ziv,我记得我非常喜欢LZW :)

编辑:

已找到解决方案;似乎原始字符串=> utf8字符串=> lzw字符串=> base64字符串是可行的。我正在进一步实现utf8和lzw之间的huffman压缩。到目前为止,问题是太多字符在编码为base64时变得非常长。

2个回答

6

先生,您几乎拯救了我的一天!这是一个很棒的库,尽管base64编码器对lzw编码的字符串不太热衷。 - bennedich
我找到了一个可用的扩展base64编码器/解码器:http://www.webtoolkit.info/javascript-base64.html。结合你提供的lzw编码器/解码器,一切都可以正常工作。感谢你的帮助! - bennedich
6
页面不存在 - 呜呜 - George Mauer

1

在URL上很难获得太多的压缩,它们太短并且不包含足够的冗余信息,无法从Huffman / LZW样式算法中获得太多好处。

如果您对可能的URLS空间有限制(例如所有内容倾向于在相同的文件夹集合中),则可以在客户端上硬编码URLS的某些部分以进行扩展 - 也就是作弊。


需要压缩的HTML代码将包含数千个字符并且包含许多相似的字符。我相信/希望压缩会产生显着的差异。 - bennedich
1
啊,好的 - 所以它们确实有点长!还有一个考虑因素 - 如果您确保HTML文档启用了GZIP压缩(即通过IIS),那么整个HTML文档已经得到了压缩。在这种情况下,在对URL进行编码并将其放入HTML之前进行压缩是否是多余的?让浏览器在代码中进行解压缩可能比您在JS中进行解压缩要快得多。 - James Gaunt
抱歉,我还没有完全理解你的意思。我刚刚了解了GZIP,它似乎比LZW更好。浏览器是否有原生支持GZIP编码/解码?将GZIP压缩的字符串直接放入URL中是否安全? - bennedich
您可以在IIS上启用GZIP压缩。请参见http://www.microsoft.com/technet/prodtechnol/windowsserver2003/library/iis/25d2170b-09c0-45fd-8da4-898cf9a7d568.mspx。然后,如果浏览器支持,任何HTML页面都会被GZIP(或DEFLATE)压缩,然后再发送到浏览器。当浏览器接收到HTML时,它将解压缩。这可能会使您对页面的小部分进行GZIP压缩变得多余 - 并且可能对页面的大小/速度产生负面影响。 - James Gaunt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接