A minor nitpick: string
s in .NET Anwendung UTF-16, nicht UTF-8
Wenn Sie über die Länge eines Strings zu sprechen, gibt es verschiedene Dinge, die man Mittelwert:
- Länge in Bytes. & # x2003; Das ist normalerweise die alte Art, Dinge zu betrachten.
- Länge in Unicode-Codepunkten. & # x2003; Dies bringt Sie näher an die modernen Zeiten und sollte der Weg sein, wie Stringlängen behandelt werden, außer es ist nicht.
- Länge in UTF-8/UTF-16 Code Einheiten. & # x2003; Dies ist die gängigste Interpretation, abgeleitet von 1. Bestimmte Zeichen benötigen mehr als eine Codeeinheit in diesen Codierungen, was die Dinge komplizierter macht, wenn Sie dies nicht erwarten.
- Anzahl der sichtbaren "Zeichen" (Grapheme). & # x2003; Das ist normalerweise was Leute meinen, wenn sie Zeichen oder Länge einer Schnur sagen.
In Ihrem Fall stammt Ihre Verwirrung aus der Differenz zwischen 4. und 3. 3. ist das, was C# verwendet, 4. ist das, was Sie erwarten. Komplexe Skripte wie Tamil verwenden Ligaturen und diakritische Zeichen. Ligaturen sind Kontraktionen von zwei oder mehr benachbarten Zeichen zu einer einzigen Glyphe - in Ihrem Fall ist ழை eine Ligatur von ழ und ை - wobei letztere die Erscheinung der ersteren verändert; வா ist auch eine solche Ligatur. Diakritische Zeichen sind Ornamente um einen Buchstaben herum, z.B. der Akzent in oder der Punkt über ப.
Die beiden Fälle, die ich erwähnte, ergeben beide ein einzelnes Graphem (was Sie als ein einzelnes Zeichen wahrnehmen), aber beide benötigen zwei tatsächliche Zeichen jeweils. Sie haben also drei weitere Codepunkte in der Zeichenfolge.
Eine Sache zu beachten: Für Ihren Fall ist die Unterscheidung zwischen 2. und 3. irrelevant, aber im Allgemeinen sollten Sie es im Hinterkopf behalten.
Danke !! Das ist die Sache, die ich suche !! Ich liebe dich! = X – Cheng