【发布时间】:2016-09-13 06:12:50
【问题描述】:
根据维基百科:
[Ascii85 使用] ASCII 字符 33 (!) 到 117 (u) 包括(表示 base-85 数字 0 到 84),以及字母 z(作为表示 32 位 0 的特殊情况值)。
[btoa] 4.2 版为一组所有 ASCII 空格字符添加了“y”例外
虽然 0 数据可能很常见,但使用 z 压缩 0 似乎是一种并非总是有用的任意优化。
同样,y 的使用频率较低,仅在原始字节包含相邻空格时才有用。空格的 Unicode 编码实际上是 20 00,所以 0x20202020 在 Unicode 文本中并不常见。
二进制数据确实经常有相邻的00,但也经常包含相邻的FF。
文本数据通常包含相邻的空格,但也经常包含相邻的制表符或换行符。
似乎频率分析和使用 9 或 10 个字符(Ascii 字符 118-126/127,或 v 到 ~/DEL)来表示 9/ 10 个最常见的 32 位值,可能会带来更好的压缩效果。
压缩字符到 32 位值的映射可能位于包含在 <[ 和 ]> 之间的编码字符串的开头。对于 4 个重复字节的 32 位值,32 位值可以缩写为重复的十六进制值。
例如:
二进制数据(192字节):
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00注意空格
20、连字符2D、制表符09和Unicode 回车换行0D 00 0A 00
可以编码为(79 字节)
<[00;FF;20;2D;09;0D000A00]><~vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|~>
使用这种压缩的编码方法有什么优点吗?为什么各种 Ascii85 规范在压缩方面没有更具侵略性?
【问题讨论】:
标签: encoding compression ascii ascii85 base85