12 个稳定版本
1.6.0 | 2024 年 5 月 13 日 |
---|---|
1.4.3 | 2024 年 2 月 16 日 |
1.4.2 | 2023 年 12 月 10 日 |
1.4.1 | 2023 年 10 月 15 日 |
0.4.0 |
|
#11 in 文本处理
724,210 每月下载量
用于 527 个 Crates (49 直接)
170KB
167 行
deunicode
deunicode
库将像 "Æneid" 这样的 Unicode 字符串转写为像 "AEneid" 这样的纯 ASCII 字符串。它包括对表情符号的支持。它与无 std Rust 环境兼容。
Deunicode 非常快,支持即时转换而不进行分配。它对 Unicode 数据的紧凑表示可以最小化内存开销和可执行文件大小(约 75K 代码点映射到 245K ASCII 字符,使用 450KB 内存,160KB 压缩后)。
示例
use deunicode::deunicode;
assert_eq!(deunicode("Æneid"), "AEneid");
assert_eq!(deunicode("étude"), "etude");
assert_eq!(deunicode("北亰"), "Bei Jing");
assert_eq!(deunicode("ᔕᓇᓇ"), "shanana");
assert_eq!(deunicode("げんまい茶"), "genmaiCha");
assert_eq!(deunicode("🦄☣"), "unicorn biohazard");
何时使用它?
它比仅删除所有非 ASCII 字符或让它们在一些编码忽略的系统中被 破坏 更好的替代方案。对于像搜索索引和标记化这样的单向转换来说是个不错的选择,作为 Unicode NFKD 的强化版本。它可以用来为文件名和 URL 生成好的标识符,这些标识符不太面向用户。
然而,像大多数此类“通用”库一样,它有一个通用的 1:1 Unicode 代码点映射,无法处理特定语言的异常或上下文相关的转写规则。这些限制对欧洲语言和韩文韩字来说只是略微不理想,但会把日文汉字搞得很乱。
保证和警告
当调用 deunicode()
时,以下是一些保证:
- 返回的
String
将是有效的 ASCII;字符串中每个char
的十进制表示将在 0 到 127 之间,包括 127。 - 每个 ASCII 字符(0x00 - 0x7F)都映射到它自己。
- 所有 Unicode 字符都将转换为可打印的 ASCII 字符(
\n
或 0x20 - 0x7E 范围内的字符)。
然而,还有一些事情你需要记住
- 某些转写会产生
\n
字符。 - 某些 Unicode 字符转写为空字符串,要么是故意的,要么是因为
deunicode
不知道该字符。 - 一些Unicode字符未知,并转写为
"[?]"
(或自定义占位符,或者如果您使用字符迭代器,则为None
)。 - 许多Unicode字符转写为多字符字符串。例如,“北”转写为“Bei”。
- 转写是上下文无关的,并且不足以生成正确的中文或日语。用于多种语言的汉字被映射到单个普通话发音,并且对于日语读者来说大多是难以辨认的。转写无法处理单个字符有多个可能发音的情况。
Unicode数据
Text::Unidecode
由Sean M. Burke编写- Unicodey 由Cal Henderson编写
- gh表情符号
- 任何ASCII
有关原始数据集背后的详细解释,请参阅Burke在2001年撰写的这篇文章。
这是一个维护的替代方案,用于unidecode crate,该crate最初是Text::Unidecode
Perl模块的Rust端口。