使用 ICU 去除变音符号的代码
有人可以提供一些示例代码来去除变音符号(即,将具有重音、变音符号等的字符替换为不重音、不变音等的字符等价物,例如,每个重音 é
都会变成使用 C++ 中的 ICU 库从 UnicodeString
获取纯 ASCII e
)?例如:
UnicodeString strip_diacritics( UnicodeString const &s ) {
UnicodeString result;
// ...
return result;
}
假设s
已经被标准化。谢谢。
Can somebody please provide some sample code to strip diacritical marks (i.e., replace characters having accents, umlauts, etc., with their unaccented, unumlauted, etc., character equivalents, e.g., every accented é
would become a plain ASCII e
) from a UnicodeString
using the ICU library in C++? E.g.:
UnicodeString strip_diacritics( UnicodeString const &s ) {
UnicodeString result;
// ...
return result;
}
Assume that s
has already been normalized. Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
ICU 允许您使用特定规则音译字符串。我的规则是 NFD; [:M:] 删除; NFC:分解、删除变音符号、重新组合。以下代码采用 UTF-8
std::string
作为输入并返回另一个 UTF-8std::string
:ICU lets you transliterate a string using a specific rule. My rule is
NFD; [:M:] Remove; NFC
: decompose, remove diacritics, recompose. The following code takes an UTF-8std::string
as an input and returns another UTF-8std::string
:在其他地方进行更多搜索后:
这是 O(n) 。
After more searching elsewhere:
which is O(n).