├── browser-source 生成浏览器版本的源文件
├── data GBK相关资源文件
├── datazip 压缩编码表相关的东西都在这里
├── dist
├── gulpfile.js gulp配制
├── index.js node版入口
├── src
└── test 测试
范围 | 第1字节 | 第2字节 | 编码数 | 字数 |
---|---|---|---|---|
水准GBK/1 | A1 –A9 |
A1 –FE |
846 | 717 |
水准GBK/2 | B0 –F7 |
A1 –FE |
6,768 | 6,763 |
水准GBK/3 | 81 –A0 |
40 –FE (7F 除外) |
6,080 | 6,080 |
水准GBK/4 | AA –FE |
40 –A0 (7F 除外) |
8,160 | 8,160 |
水准GBK/5 | A8 –A9 |
40 –A0 (7F 除外) |
192 | 166 |
用户定义 | AA –AF |
A1 –FE |
564 | |
用户定义 | F8 –FE |
A1 –FE |
658 | |
用户定义 | A1 –A7 |
40 –A0 (7F 除外) |
672 | |
合计: | 23,940 | 21,886 |
最终拿到一个
GBK
码位顺序的Unicode
数组 (不包含扩展码位)
将数组转为 x进制
3位编码, 空码用 '#' 代替
(x 范围(40 - 89)) 小于40进制时,编码可能超过3位
- 数组各项合并成一个字符串.
- 连续空码位压缩: 连续8个空码位
########
=>#5$
- 连续前位字符相同压缩(分隔符为空格):
abb
abc
abd
abe
abf
=>ab!bcdef
- 在上一位基础上进一步压缩:
ab!bcdef
=>ab!b%f
压缩时占用了6个符号做特殊用途分别是:
#
0x23 空码$
0x24 连续空码结束标志!
0x21 前两位相同标志%
0x25 第三位递增标志"
0x22javascript
占用(用\"
或\'
造成压缩效果变差).
ASCII
可见字符是0x20 - 0x7e
所以多进制转换可用字符为0x26 - 0x7e
共89个字符, 所以最大进制为89进制
./datazip
执行后会拿到zipData
压缩后的字符串unZipFn
解压函数的源码 ()decodeFn
压缩转x进制的反函数的源码
- 替换
./browser-source/*.js
中的占位符 - 输出