Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Vor dieser Änderung wurden alle Graphemecluster von System.Globalization.StringInfo und System.Globalization.TextElementEnumerator nicht ordnungsgemäß behandelt. Einige Graphemes wurden in ihre Bestandteile aufgeteilt, anstatt zusammengehalten zu werden. StringInfo und TextElementEnumerator verarbeiten jetzt Grapheme-Cluster gemäß der neuesten Version des Unicode-Standards.
Darüber hinaus folgt die Microsoft.VisualBasic.Strings.StrReverse Methode, die die Zeichen in einer Zeichenfolge in Visual Basic umkehrt, nun auch dem Unicode-Standard für Grapheme-Cluster.
Änderungsbeschreibung
Ein Grapheme - oder erweiterter Graphemecluster ist ein einzelnes vom Benutzer wahrgenommenes Zeichen, das aus mehreren Unicode-Codepunkten besteht. Beispielsweise besteht die Zeichenfolge mit dem thailändischen Zeichen "kam" (กำ) aus den folgenden beiden Zeichen:
- ก (= '\u0e01') THAI ZEICHEN KO KAI
- ำ (= '\u0e33') THAI-CHARAKTER SARA AM
Wenn diese dem Benutzer angezeigt werden, kombiniert das Betriebssystem die beiden Zeichen und formt das angezeigte Einzelzeichen (oder Graphem) „kam“ oder กำ. Emojis können auch aus mehreren Zeichen bestehen, die auf ähnliche Weise für die Anzeige kombiniert werden.
Tipp
In der .NET-Dokumentation wird manchmal der Begriff "Textelement" verwendet, wenn auf ein Graphem verwiesen wird.
Die StringInfo Klassen TextElementEnumerator prüfen Zeichenfolgen und geben Informationen zu den darin enthaltenen Graphemen zurück. In .NET Framework (alle Versionen) und .NET Core 3.x und früheren Versionen verwenden diese beiden Klassen benutzerdefinierte Logik, die einige kombinierte Klassen behandelt, aber nicht vollständig den Unicode-Standard erfüllt. Beispielsweise teilen die Klassen StringInfo und TextElementEnumerator fälschlicherweise das einzelne thailändische Zeichen "kam" in seine Bestandteile auf, anstatt sie zusammenzuhalten. Diese Klassen teilen auch fälschlicherweise das Emoji-Zeichen „🤷🏽♀️♀️“ in vier Bestandteile auf (achselzuckende Person, Hautfarbenmodifizierer, Geschlechtsmodifizierer, unsichtbarer Combiner), anstatt es als einen einzelnen Graphem-Cluster zu speichern.
Ab .NET 5 implementieren die StringInfo- und TextElementEnumerator-Klassen den Unicode-Standard, wie im Unicode Standard Annex #29, Rev. 35, Sec. 3 definiert. Insbesondere geben sie erweiterte Grapheme-Cluster für alle kombinierten Klassen zurück.
Berücksichtigen Sie den folgenden C#-Code:
using System.Globalization;
static void Main(string[] args)
{
PrintGraphemes("กำ");
PrintGraphemes("🤷🏽♀️");
}
static void PrintGraphemes(string str)
{
Console.WriteLine($"Printing graphemes of \"{str}\"...");
int i = 0;
TextElementEnumerator enumerator = StringInfo.GetTextElementEnumerator(str);
while (enumerator.MoveNext())
{
Console.WriteLine($"Grapheme {++i}: \"{enumerator.Current}\"");
}
Console.WriteLine($"({i} grapheme(s) total.)");
Console.WriteLine();
}
In .NET Framework und .NET Core 3.x und früheren Versionen werden die Graphemen aufgeteilt, und die Konsolenausgabe lautet wie folgt:
Printing graphemes of "กำ"...
Grapheme 1: "ก"
Grapheme 2: "ำ"
(2 grapheme(s) total.)
Printing graphemes of "🤷🏽♀️"...
Grapheme 1: "🤷"
Grapheme 2: "🏽"
Grapheme 3: ""
Grapheme 4: "♀️"
(4 grapheme(s) total.)
In .NET 5 und höheren Versionen werden die Graphemen zusammengehalten, und die Konsolenausgabe lautet wie folgt:
Printing graphemes of "กำ"...
Grapheme 1: "กำ"
(1 grapheme(s) total.)
Printing graphemes of "🤷🏽♀️"...
Grapheme 1: "🤷🏽♀️"
(1 grapheme(s) total.)
Ab .NET 5 folgt die Microsoft.VisualBasic.Strings.StrReverse Methode, die die Zeichen in einer Zeichenfolge in Visual Basic umkehrt, nun auch dem Unicode-Standard für Grapheme-Cluster.
Diese Änderungen sind Teil einer breiteren Gruppe von Unicode- und UTF-8-Verbesserungen in .NET, einschließlich einer erweiterten Grapheme-Clusterenumerations-API, um die Unicode-Skalarwert-Enumerations-APIs zu ergänzen, die mit dem System.Text.Rune Typ in .NET Core 3.0 eingeführt wurden.
Eingeführte Version
.NET 5.0
Empfohlene Aktion
Sie müssen keine Maßnahmen ergreifen. Ihre Apps verhalten sich automatisch auf eine konformere Weise in einer Vielzahl von Szenarien, die mit der Globalisierung zusammenhängen.