28个版本 (10个重大变更)
0.12.0 | 2024年6月29日 |
---|---|
0.10.4 | 2024年1月14日 |
0.10.1 | 2023年12月21日 |
0.9.2 |
|
0.2.6 | 2022年11月20日 |
#774 in 编码
每月311次下载
在 2 crates 中使用
75KB
872 行
zalgo-codec-common
一个将仅包含可打印ASCII和换行符的字符串转换为单个Unicode图形簇并反向转换的crate。提供crate zalgo-codec
的非宏功能。
与编码器交互有两种方式。第一种是直接调用编码和解码函数,第二种是使用ZalgoString
包装类型。
示例
使用zalgo_encode
将字符串编码为图形簇
let s = "Zalgo";
let encoded = zalgo_encode(s)?;
assert_eq!(encoded, "É̺͇͌͏");
将图形簇解码回字符串
let encoded = "É̺͇͌͏";
let s = zalgo_decode(encoded)?;
assert_eq!(s, "Zalgo");
可以使用ZalgoString
类型来编码字符串并以各种方式处理结果
let s = "Zalgo";
let zstr = ZalgoString::new(s)?;
assert_eq!(zstr, "É̺͇͌͏");
assert_eq!(zstr.len(), 2 * s.len() + 1);
assert_eq!(zstr.decoded_len(), s.len());
assert_eq!(zstr.bytes().next(), Some(69));
assert_eq!(zstr.decoded_chars().next_back(), Some('o'));
说明
Unicode拉丁字母的合成字符是U+0300–U+036F。合成字符有趣的地方在于,您可以添加任意数量的这些字符到原始字符上,它不会创建任何新的符号,只是在上面的字符上添加符号。这应该用于创建如 á
这样的字符,通过将正常的 a
字符添加另一个字符来赋予它标记(在这个例子中是U+301)。有趣的事实:Unicode没有对这些字符的数量指定任何限制。方便的是,这给了我们112个不同的字符可以映射,这些字符很好地映射到了ASCII字符范围0x20 -> 0x7F,也就是所有的非控制字符。唯一的问题是,我们无法在这个系统中添加换行符,所以为了解决这个问题,我们可以简单地映射0x7F(DEL)到0x0A(LF)。这可以表示为 (CHARACTER - 11) % 133 - 21
,并通过 (CHARACTER + 22) % 133 + 10
来解码。
对编解码器进行实验
有一个可执行的文件可供在文本和文件上实验编解码器。可以使用以下命令进行安装:cargo install zalgo-codec --features binary
。您可以在安装过程中选择启用 gui
功能,以便包含程序的简单图形界面模式。
许可证
根据您的选择,以下任一许可证
- Apache许可证版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
自由选择。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交给作品以包括在内的任何贡献,将根据上述条款双许可,没有任何附加条款或条件。
依赖项
~170KB