Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
.NET 5 a novější verze používají knihovny International Components for Unicode (ICU) pro funkce globalizace při spuštění na aktualizaci Windows 10 z května 2019 nebo novější.
Změna popisu
Knihovny .NET Core 1.0 – 3.1 a .NET Framework 4 a novější používají rozhraní API národní podpory jazyků (NLS) pro funkce globalizace ve Windows. Například funkce NLS byly použity k porovnání řetězců, získání informací o jazykovém prostředí a změnu velikosti písmen v řetězci v příslušném jazykovém prostředí.
Počínaje .NET 5, pokud je aplikace spuštěná na Windows 10 s aktualizací z května 2019 nebo novější, knihovny .NET používají ve výchozím nastavení rozhraní ICU pro globalizaci.
Poznámka:
Aktualizace Windows 10 z května 2019 a novějších verzích se dodávají s nativní knihovnou ICU. Pokud modul runtime .NET nemůže načíst knihovnu ICU, použije místo toho systém NLS.
Rozdíly v chování
V aplikaci se můžou zobrazit změny, i když si neuvědomujete, že používáte funkce globalizace. Tato část uvádí několik změn chování, které můžete pozorovat, ale jsou i další.
String.IndexOf
Představte si následující kód, který volá String.IndexOf(String), aby našel index znaku nového řádku v řetězci.
string s = "Hello\r\nworld!";
int idx = s.IndexOf("\n");
Console.WriteLine(idx);
- V .NET Core 3.1 a starších verzích ve Windows se fragment kódu vytiskne
6. - V .NET 5 a v aktualizaci Windows 10 z května 2019 a novějších verzích se fragment kódu zobrazí jako
-1. - V .NET 6 a novějších verzích úryvek vytiskne
6, ale knihovny ICU se stále používají.
Chcete-li tento kód opravit provedením řadového vyhledávání místo vyhledávání citlivého na jazykovou verzi, zavolejte přetížení IndexOf(String, StringComparison) a předáte StringComparison.Ordinal jako argument.
Pravidla analýzy kódu CA1307: Zadejte StringComparison pro přehlednost a CA1309: Použijte ordinační StringComparison vyhledejte tato místa volání ve vašem kódu.
Další informace najdete v tématu Osvědčené postupy pro porovnávání řetězců v .NET.
Symbol měny
Zvažte následující kód, který formátuje řetězec pomocí specifikátoru formátu měny C. Kultura aktuálního vlákna je nastavena na takovou, která zahrnuje pouze jazyk, nikoli zemi nebo oblast.
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de");
string text = string.Format("{0:C}", 100);
- V .NET Core 3.1 a starších verzích na Windows je hodnota textu
"100,00 €". - V .NET 5 a novějších verzích ve Windows 19H1 a novějších verzích je hodnota textu
"100,00 ¤", která místo eura používá mezinárodní měnový symbol. V ICU je návrh, že měna je vlastnost země nebo oblasti, nikoli jazyk.
IdnMapping.GetAscii
Představte si následující kód, který volá IdnMapping.GetAscii(String) převod etikety mezinárodního názvu domény na kódování kompatibilní se ASCII.
var mapping = new System.Globalization.IdnMapping();
string asciiName = mapping.GetAscii("ABCDEFG");
Console.WriteLine(asciiName);
- V .NET Core 3.1 a starších verzích ve Windows se fragment kódu vytiskne
ABCDEFG. - V .NET 5 a novějších verzích pro aktualizaci Windows 10 z května 2019 a novějších verzích se úryvek kódu vytiskne
abcdefg.
ICU mění popisky názvu domény na malá písmena jako součást procesu kódování kompatibilního s ASCII. Služba NLS neobsahuje malá písmena, která neobsahují žádné mezinárodní znaky, takže původní písmena se zachovají.
Zkratky dnů v týdnu
Metoda DateTimeFormatInfo.GetShortestDayName(DayOfWeek) získá nejkratší zkrácený název dne pro zadaný den v týdnu.
- V .NET Core 3.1 a starších verzích na Windows se tyto zkratky dnů v týdnu skládaly ze dvou znaků, například "Su".
- V .NET 5 a novějších verzích se tyto zkratky dnů v týdnu skládají jenom z jednoho znaku, například "S".
Důvod změny
Tato změna byla zavedena ke sjednocení chování globalizace .NET na všech podporovaných operačních systémech. Poskytuje také možnost aplikacím seskupit vlastní knihovny globalizace, nikoli záviset na integrovaných knihovnách operačního systému.
Zavedená verze
.NET 5.0
Doporučená akce
Na straně vývojáře není nutná žádná akce. Pokud ale chcete pokračovat v používání rozhraní API globalizace služby NLS, můžete nastavit přepínač modulu runtime , který se má vrátit k takovému chování. Další informace o dostupných přepínačích najdete v článku globalizace a ICU platformy .NET.
Ovlivněná rozhraní API
- System.Span<T>
- System.String
- Většina typů v System.Globalization oboru názvů
- System.Array.Sort (při řazení pole řetězců)
- System.Collections.Generic.List<T>.Sort() (pokud jsou prvky seznamu řetězce)
- System.Collections.Generic.SortedDictionary<TKey,TValue> (pokud jsou klíče řetězce)
- System.Collections.Generic.SortedList<TKey,TValue> (pokud jsou klíče řetězce)
- System.Collections.Generic.SortedSet<T> (pokud sada obsahuje řetězce)