关于 gzip, deflate, zlib, LZ77

LZ77: 是一种基于字典的无损数据压缩算法(还有 LZ78, LZW 等)

deflate: 也是一种数据压缩算法,实际上就是先用 LZ77 压缩,然后用霍夫曼编码压缩

gzip: 是一种文件结构,也可以算一种压缩格式,通过 defalte 算法压缩数据,然后加上文件头和CRC校验

zlib: 是一个提供了 deflate, zlib, gzip 压缩方法的函数库;也是一种压缩格式(用 deflate 压缩数据,然后加上 zlib 头和 CRC 校验)

PHP 中的 zlib 扩展提供了对以上压缩格式的支持,其中的函数和压缩格式的对应关系如下:

gzdeflate, gzinflate 对应 deflate

gzcompress, gzuncompress 对应 zlib 格式压缩

gzencode, gzdecode 对应 gzip 格式压缩

Python 中的 zlib 模块也提供了上述压缩格式的支持,不过接口很“隐晦”:

zlib.compress  对数据进行 zlib 格式压缩,好像压缩的时候只支持这一种格式,不过你可以通过把压缩后的数据去掉两字节 zlib 头和末尾 4 字节的 CRC 校验得到 deflate 格式的压缩数据(zlib_compressed[2:-4]);对于 gzip 压缩格式可以通过 gzip 模块得到。

zlib.decompress(string[,wbits[,bufsize]]) 解压更折腾,压缩格式是通过 wbits 参数控制的:

  • [8, 15]:解压 zlib 格式的数据
  • [-8, -15]:解压 deflate 格式数据
  • [16, 30]:解压 gzip 格式数据

另外,对于 Apache 的页面压缩:

Content-Encoding: gzip 对应 gzip 格式压缩

Cotent-Encoding: deflate 对应  deflate 压缩

SecureCRT中文字体解决方案

以前在Windows上ssh登录一直都是用putty,虽然它简单小巧,但毕竟缺少很多特性。今天试了一下SecureCRT,感觉用起来比Putty好多了,但SecureCRT默认的字体超难看,而且中文字体设置也比较麻烦一点,在这里记录一下以后可能还用得到。

  1. 在“会话选项”的“终端->仿真”里面选“Linux”,如果需要显示颜色的话需要把“ANSI颜色”选上
  2. 在“外观->字体”中选择喜欢的字体,但这里对字体是有要求的,只有等宽字体才行。如果要正常显示中文的话,所选择的字体还必须包含中文字符。
  3. 另外就是根据你要登录的主机的字符编码选择字符编码,一般是 “UTF-8″

简单的几步下来就设置好了,如果还有乱码的话就退出然后重新登陆一下。如果你想所有的连接都使用这个默认配置,可以在“全局选项”中设置“默认的会话选项”,这样以后新建的连接会自动应用上面的设置了。

PS:

以前用putty的时候,字体就直接用我在Linux最爱的Monaco,但在SecureCRT中用Monaco字体的话,中文会显示为乱码,这是因为Monaco字体中不包含中文字符,而SecureCRT也不会自动的选择系统默认的中文字体。

为了解决这个问题,我们只要去找一个包含中文的等宽字体来用,我从网上找了一个Consolas和雅黑的混合字体,虽然没有Monaco好看,但效果也还不错。这里有个地方需要注意一下,在选择这个字体的字体选择对话框中,字体的默认字符集是“西方”,需要改成CHINESE_GB2312。

如果你也想用这个字体的话,可以从这里下载。