base_any 0.1.0

通用的 base 系列编解码。中文编码。
Documentation
# 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%    |