#unicode #skeleton #confusable #unicode-characters #text

unicode_skeleton

该软件包检测看似几乎相同的 Unicode 字符串,但实际上并不相等。它基于 Unicode 标准附录 #39 定义“易混淆”和“骨架”。

2 个版本

使用旧的 Rust 2015

0.1.1 2017 年 10 月 8 日
0.1.0 2017 年 10 月 8 日

#1813 in 文本处理

Download history 17/week @ 2024-02-23 17/week @ 2024-03-01 6/week @ 2024-03-08 7/week @ 2024-03-15 4/week @ 2024-03-22 40/week @ 2024-03-29 6/week @ 2024-04-05 2/week @ 2024-04-19 1/week @ 2024-04-26 1/week @ 2024-05-03 4/week @ 2024-05-10 11/week @ 2024-05-17 35/week @ 2024-05-24 5/week @ 2024-05-31 1/week @ 2024-06-07

54 每月下载量
2 crates 中使用

MIT/Apache

160KB
105 代码行

Unicode 字符“易混淆”检测和“骨架”计算,由 Unicode 标准附录 #39 指定。这些函数用于处理看起来几乎相同,但实际上不等的字符串。

文档

extern crate unicode_skeleton;

use unicode_skeleton::{UnicodeSkeleton, confusable};

fn main() {
    assert_eq!("𝔭𝒶ỿ𝕡𝕒ℓ".skeleton_chars().collect::<String>(), "paypal");
    assert!(confusable("ℝ𝓊𝓈𝓉", "Rust"));
}

crates.io

将以下内容添加到您的 Cargo.toml 以使用

[dependencies]
unicode_skeleton = "0.1.0"

lib.rs:

通过替换不寻常的字符为相似外观的常见字符,将 Unicode 字符串转换,如由 Unicode 标准附录 #39 指定。例如,“ℝ𝓊𝓈𝓉”将被转换为“Rust”。这个简化的字符串称为“骨架”。

use unicode_skeleton::UnicodeSkeleton;

"ℝ𝓊𝓈𝓉".skeleton_chars().collect::<String>() // "Rust"

如果字符串具有相同的骨架,则认为这些字符串是“易混淆”的。例如,“ℝ𝓊𝓈𝓉”和“Rust”是易混淆的。

use unicode_skeleton::confusable;

confusable("ℝ𝓊𝓈𝓉", "Rust") // true

骨架转换基于 Unicode 安全机制 UTR #39 版本 10.0.0。

依赖项

~800KB
~40K SLoC