#codec #unicode #obfuscation #zalgo #ascii-text #text-encoding

no-std zalgo-codec-common

将ASCII文本字符串转换为单个Unicode图形簇,并反向转换

28个版本 (10个重大变更)

0.12.0 2024年6月29日
0.10.4 2024年1月14日
0.10.1 2023年12月21日
0.9.2 2023年11月28日
0.2.6 2022年11月20日

#774 in 编码

Download history 6/week @ 2024-04-14 386/week @ 2024-04-28 5/week @ 2024-05-26 174/week @ 2024-06-02 232/week @ 2024-06-09 41/week @ 2024-06-16 155/week @ 2024-06-23 87/week @ 2024-06-30 3/week @ 2024-07-07 6/week @ 2024-07-21 301/week @ 2024-07-28

每月311次下载
2 crates 中使用

MIT/Apache

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许可证定义的,您有意提交给作品以包括在内的任何贡献,将根据上述条款双许可,没有任何附加条款或条件。

依赖项

~170KB