从 C 中的 UTF8 字符串中删除变音符号

2024-03-20

我正在编写一个 C 程序来搜索数据库中的大量 UTF-8 字符串。其中一些字符串包含带教义的英文字符,例如重音符号等。搜索字符串是由用户输入的,因此很可能不包含此类字符。有没有一种方法(函数、库等)可以从字符串中删除这些字符,或者只是执行不敏感的搜索?例如,如果用户输入搜索字符串“motor”,它应该与字符串“motorhead”匹配。

我的第一次尝试是手动删除此处描述的组合教学修饰符:

http://en.wikipedia.org/wiki/Combining_character http://en.wikipedia.org/wiki/Combining_character

这在某些情况下有效,但事实证明其中许多字符也具有特定的 unicode 值。例如,上面的字符“ö”可以用“o”后跟组合教学U+0308来表示,但它也可以用单个unicode字符U+00F6来表示,而我的方法只过滤了前者。

我还研究了 iconv,它可以从 UTF8 转换为 ASCII。但是,我可能想在将来本地化我的程序,这无疑会导致非英语字符的语言出现问题。有没有办法可以简单地删除/转换这些重音字符?

编辑:删除了问题标题中的拼写错误。


转换成分解的标准化之一 http://unicode.org/reports/tr15/-- 可能是 NFD,但您甚至可能需要 NFKD -- 这使得所有变音符号都变成可以删除的组合字符。

为此你需要一个库。我听到一些好消息ICU http://icu-project.org/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 C 中的 UTF8 字符串中删除变音符号 的相关文章

随机推荐