Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przed tą zmianą System.Globalization.StringInfo i System.Globalization.TextElementEnumerator nie obsłużyła poprawnie wszystkich klastrów grafu. Niektóre grafemy zostały podzielone na ich składniki składowe, zamiast być przechowywane razem. Teraz StringInfo i TextElementEnumerator przetwarzają klastry grafemowe zgodnie z najnowszą wersją Standardu Unicode.
Ponadto Microsoft.VisualBasic.Strings.StrReverse metoda, która odwraca znaki w ciągu w Visual Basic, teraz jest również zgodna ze standardem Unicode dla klastrów grapheme.
Zmień opis
Grafem lub klaster rozszerzonego grafemu to znak postrzegany jako pojedynczy przez użytkownika, który może składać się z wielu punktów kodowych Unicode. Na przykład ciąg zawierający tajlandzki znak "kam" (กำ) składa się z następujących dwóch znaków:
- ก (= '\u0e01') TAJLANDZKA POSTAĆ KO KAI
- ำ (= '\u0e33') TAJLANDZKA POSTAĆ SARA AM
Po wyświetleniu użytkownikowi system operacyjny łączy dwa znaki w celu utworzenia pojedynczego znaku wyświetlanego (lub grafu) "kam" lub กำ. Emoji może również składać się z wielu znaków połączonych do wyświetlania w podobny sposób.
Wskazówka
Dokumentacja platformy .NET czasami używa terminu "element tekstowy" podczas odwoływania się do grafu.
Klasy StringInfo i TextElementEnumerator sprawdzają ciągi i zwracają informacje o grafach, które zawierają. W programach .NET Framework (wszystkie wersje) i .NET Core 3.x i starszych tych dwóch klas używa logiki niestandardowej, która obsługuje niektóre połączone klasy, ale nie jest w pełni zgodna ze standardem Unicode. Na przykład klasy StringInfo i TextElementEnumerator niepoprawnie dzielą tajski znak "kam" na jego składniki, zamiast pozostawiać go w całości. Te klasy również niepoprawnie podzieliły znak emoji "🤷🏽♀️" na cztery klastry (osoba wzruszająca ramionami, modyfikator koloru skóry, modyfikator płci i niewidoczny łącznik) zamiast utrzymać je razem jako pojedynczy klaster grafemowy.
Począwszy od platformy .NET 5, klasy StringInfo i TextElementEnumerator implementują standard Unicode zgodnie z definicją w Załączniku Standardu Unicode nr 29, rev. 35, sekcja 3. W szczególności teraz zwracają rozszerzone klastry grafemów dla wszystkich klas łączących.
Rozważmy następujący kod w języku C#:
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();
}
W programach .NET Framework i .NET Core 3.x i starszych wersjach wykresy są podzielone, a dane wyjściowe konsoli są następujące:
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.)
W wersjach platformy .NET 5 i nowszych wykresy są przechowywane razem, a dane wyjściowe konsoli są następujące:
Printing graphemes of "กำ"...
Grapheme 1: "กำ"
(1 grapheme(s) total.)
Printing graphemes of "🤷🏽♀️"...
Grapheme 1: "🤷🏽♀️"
(1 grapheme(s) total.)
Ponadto, począwszy od platformy .NET 5, metoda Microsoft.VisualBasic.Strings.StrReverse, która odwraca znaki w ciągu znaków w Visual Basic, teraz jest również zgodna ze standardem Unicode dla klastrów graficznych.
Te zmiany są częścią szerszego zestawu ulepszeń Unicode i UTF-8 na platformie .NET, w tym rozszerzonego API wyliczania klastrów grafemów w celu uzupełnienia API wyliczania wartości skalarnej Unicode, które zostały wprowadzone z typem System.Text.Rune na platformie .NET Core 3.0.
Wersja wprowadzona
.NET 5.0
Zalecana akcja
Nie musisz podejmować żadnych działań. Aplikacje będą automatycznie zachowywać się w bardziej zgodny ze standardami sposób w różnych scenariuszach związanych z globalizacją.