我想从字符串中删除重音符号和更一般的变音符号以启动重音不敏感搜索.基于对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;
}
Run Code Online (Sandbox Code Playgroud)
对于基于拉丁语的语言似乎工作得相当好,但我想知道它对其他字母表的充分性:阿拉伯语,西里尔语,CJK ......由于缺乏对这些语言的文化理解,我无法测试.
具体来说,我希望我知道:
NormalizationForm_KD或NormalizationForm_D?Mark_NonSpacing和Mark_SpacingCombining类别的字符或是否应包含更多类别?小智 2
QString unaccent(const QString s)
{
QString output(s.normalized(QString::NormalizationForm_D));
return output.replace(QRegExp("[^a-zA-Z\\s]"), "");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4330 次 |
| 最近记录: |