#unicode #unicode-characters #ascii #emoji #transliteration #string-conversion #unidecode

no-std deunicode

通过智能转写将 Unicode 字符串转换为纯 ASCII 字符串。支持表情符号和中文。

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 2018 年 5 月 5 日

#11 in 文本处理

Download history 172325/week @ 2024-05-02 169280/week @ 2024-05-09 191231/week @ 2024-05-16 188923/week @ 2024-05-23 181209/week @ 2024-05-30 194457/week @ 2024-06-06 191673/week @ 2024-06-13 192519/week @ 2024-06-20 193868/week @ 2024-06-27 161099/week @ 2024-07-04 159718/week @ 2024-07-11 159220/week @ 2024-07-18 170867/week @ 2024-07-25 163540/week @ 2024-08-01 177432/week @ 2024-08-08 181275/week @ 2024-08-15

724,210 每月下载量
用于 527 个 Crates (49 直接)

BSD-3-Clause

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数据

有关原始数据集背后的详细解释,请参阅Burke在2001年撰写的这篇文章

这是一个维护的替代方案,用于unidecode crate,该crate最初是Text::Unidecode Perl模块的Rust端口。

无运行时依赖

功能