Akzente aus einem QString entfernen [duplizieren]

Diese Frage hat hier bereits eine Antwort:

So entfernen Sie Akzente / diakritische Zeichen aus einer Zeichenfolge in Qt? 4 Antworten

Ich möchte Akzente und allgemein diakritische Zeichen aus einer Zeichenfolge entfernen, um eine akzentunabhängige Suche einzuleiten. Ausgehend von einigen Lektüren zu Unicode-Zeichenklassen habe ich Folgendes herausgefunden:

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

Es scheint für lateinischsprachige Sprachen recht gut zu funktionieren, aber ich frage mich, ob es für andere Alphabete geeignet ist: Arabisch, Kyrillisch, CJK ..., die ich aufgrund mangelnder kultureller Kenntnisse nicht testen kann.

Konkret würde ich gerne wissen:

Welche Unicode-Normalisierungsform ist für dieses Problem besser geeignet:NormalizationForm_KD oderNormalizationForm_D?Reicht es aus, die dazugehörigen Zeichen zu entfernen?Mark_NonSpacing undMark_SpacingCombining Kategorien oder sollte es mehr Kategorien enthalten?Gibt es weitere Verbesserungen am obigen Code, die es für alle Sprachen so gut wie möglich machen würden?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage