#decode #encode #no-std

no-std bin+lib base_any

通用的 base 系列编解码。中文编码。

1 unstable release

0.1.0 Aug 29, 2024

#1748 in Encoding

MIT/Apache

38KB
484 lines

base_any

通用的 base 系列编解码。中文编码。

库使用示例

use base_any::tables::BASE1024;
assert_eq!(BASE1024.encode_str("你好世界".bytes()), "阮诮珍据晚韩扶累精悲");
assert_eq!(BASE1024.decode_vec("阮诮珍据晚韩扶累精悲".chars()).unwrap(), "你好世界".as_bytes());

命令行使用示例

# 假设可执行文件为 ./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%

No runtime deps