相关疑难解决方法(0)

从QString中删除重音符号

我想从字符串中删除重音符号和更一般的变音符号以启动重音不敏感搜索.基于对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 ......由于缺乏对这些语言的文化理解,我无法测试.

具体来说,我希望我知道:

  1. 什么Unicode规范化形式更适合这个问题:NormalizationForm_KD或NormalizationForm_D?
  2. 是否足以删除属于Mark_NonSpacing和Mark_SpacingCombining类别的字符或是否应包含更多类别?
  3. 上述代码是否有其他改进可以使所有语言尽可能地发挥作用?

unicode qt

8
推荐指数
1
解决办法
4330
查看次数

标签 统计

qt ×1

unicode ×1