# base_any 通用的 base 系列编解码。中文编码。 ## 库使用示例 ```rust use base_any::tables::BASE1024; assert_eq!(BASE1024.encode_str("你好世界".bytes()), "阮诮珍据晚韩扶累精悲"); assert_eq!(BASE1024.decode_vec("阮诮珍据晚韩扶累精悲".chars()).unwrap(), "你好世界".as_bytes()); ``` ## 命令行使用示例 ```bash # 假设可执行文件为 ./base_any echo -n 你好世界 | ./base_any en BASE1024 # 阮诮珍据晚韩扶累精悲 echo -n 阮诮珍据晚韩扶累精悲 | ./base_any de BASE1024 # 你好世界 ./base_any stat # 输出统计表格 ``` ## 功能 理论支持 base2 到 base32768 的编码方案。支持 Unicode 字符。 要求每字符对应 1-15 位。不支持 base91 这种编码。 每字符对应多于一字节(base256 以上)的编码方案,有结尾字符集。 输入数据结尾若不够比一字节多,则使用结尾字符集编码。 在 `table` 文件夹中配置方案,编译时自动生成常量。 ## 方案 我独创中文编码如下。 ### `base8192` 正文字符集: - 数字(0-9) - 拉丁字母小写、大写 - 苏州码子九个 - 注音符号介母、韵母 - 《通用规范汉字表》8105 字 结尾字符集:前三十二个平假名。 优势: - 全都属于 `XID_Continue` - 全都满足 `char::is_alphanumeric` ### `base1024` 正文字符集: - 《千字文》(剔除重复) - 天干地支(剔除重复) - 注音符号韵母 结尾字符集:前四个注音符号声母(ㄅㄆㄇㄈ)。 优势:同上,且 - 全是汉字和注音符号 - 全是第零平面(BMP)的字符 - 全都属于 `XID_Start` ### `base256` 字符集:《千字文》前 256 个不重复的字。 优势:同上,且 - 全是汉字,全是《通用规范汉字表》里的一、二级字 - 一个字节对应一个汉字 ## 效率 下表由 `./base_any stat` 生成。 | Name | Bits | Range | UTF-8 Effi | UTF-16 Effi | |:----------:|:----:|:-------:|:----------:|:-----------:| | BASE1024 | 10 | BMP | 41.67% | 62.50% | | BASE256 | 8 | BMP | 33.33% | 50.00% | | BASE32 | 5 | ASCII | 62.50% | 31.25% | | BASE32HEX | 5 | ASCII | 62.50% | 31.25% | | BASE64 | 6 | ASCII | 75.00% | 37.50% | | BASE64URL | 6 | ASCII | 75.00% | 37.50% | | BASE8192 | 13 | Unicode | 54.01% | 79.35% | | GUA64 | 6 | BMP | 25.00% | 37.50% | | GUA8 | 3 | BMP | 12.50% | 18.75% | | HEX | 4 | ASCII | 50.00% | 25.00% |