Usuwanie akcentów z QString [duplikat]

To pytanie ma już tutaj odpowiedź:

Jak usunąć akcenty / znaki diakrytyczne z ciągu w Qt? 4 odpowiedzi

Chcę usunąć akcenty i bardziej ogólnie znaki diakrytyczne z łańcucha, aby rozpocząć wyszukiwanie niewrażliwe na akcent. Opierając się na niektórych lekturach klas znaków Unicode, wymyśliłem to:

 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;
 }

Wydaje się, że działa dobrze w przypadku języków łacińskich, ale zastanawiam się nad jego adekwatnością w innych alfabetach: arabskim, cyrylicy, CJK ... których nie mogę przetestować z powodu braku ich kulturowego zrozumienia.

W szczególności chciałbym wiedzieć:

Jaki format normalizacji Unicode jest lepiej dostosowany do tego problemu:NormalizationForm_KD lubNormalizationForm_D?Czy wystarczy usunąć należące do niego postacieMark_NonSpacing iMark_SpacingCombining kategorie lub czy powinien zawierać więcej kategorii?Czy istnieją inne ulepszenia powyższego kodu, które sprawią, że będzie działać najlepiej, jak to możliwe, dla wszystkich języków?

questionAnswers(1)

yourAnswerToTheQuestion