我想从字符串中删除重音符号和更一般的变音符号以启动不区分重音的搜索。 基于对Unicode字符类的一些阅读,我想出了这个:
QString unaccent(const QString s)
{
QString s2 = s.normalized(QString::NormalizationForm_D);
QString out;
for (int i=0,j=s2.length(); i<j; i++)
{
// strip diacritic marks
if (s2.at(i).category()!=QChar::Mark_NonSpacing &&
s2.at(i).category()!=QChar::Mark_SpacingCombining)
{
out.append(s2.at(i));
}
}
return out;
}
对于基于拉丁语的语言似乎工作得相当好,但我想知道它对其他字母表的充分性:阿拉伯语,西里尔语,CJK ......由于缺乏对这些语言的文化理解,我无法测试。
具体来说,我希望我知道:
NormalizationForm_KD
或NormalizationForm_D
?Mark_NonSpacing
和Mark_SpacingCombining
类别的字符,还是应该包含更多类别?答案 0 :(得分:2)
QString unaccent(const QString s)
{
QString output(s.normalized(QString::NormalizationForm_D));
return output.replace(QRegExp("[^a-zA-Z\\s]"), "");
}