Globalization-API's maken gebruik van ICU-bibliotheken in Windows 10
.NET 5- en latere versies maken gebruik van ICU-bibliotheken (International Components for Unicode) voor globalisatiefunctionaliteit bij uitvoering op Windows 10 mei 2019 Update of hoger.
Wijzigingsbeschrijving
In .NET Core 1.0 - 3.1 en .NET Framework 4 en hoger maken .NET-bibliotheken gebruik van NLS-API's (National Language Support) voor globalisatiefunctionaliteit in Windows. NlS-functies werden bijvoorbeeld gebruikt om tekenreeksen te vergelijken, cultuurinformatie op te halen en tekenreeksbehuizing uit te voeren in de juiste cultuur.
Vanaf .NET 5, als een app wordt uitgevoerd op Windows 10 mei 2019 Update of hoger, gebruiken .NET-bibliotheken standaard ICU globalization API's.
Notitie
Windows 10 mei 2019 Update en latere versies worden geleverd met de systeemeigen ICU-bibliotheek. Als de .NET-runtime ICU niet kan laden, wordt in plaats daarvan NLS gebruikt.
Gedragsverschillen
Mogelijk ziet u wijzigingen in uw app, zelfs als u zich niet realiseert dat u gebruikmaakt van globalisatiefaciliteiten. In deze sectie vindt u een aantal gedragswijzigingen die u mogelijk ziet, maar er zijn ook andere.
String.IndexOf
Houd rekening met de volgende code die de index van het nieuwe-regelteken in een tekenreeks aanroept String.IndexOf(String) .
string s = "Hello\r\nworld!";
int idx = s.IndexOf("\n");
Console.WriteLine(idx);
- In .NET Core 3.1 en eerdere versies in Windows wordt het fragment afgedrukt
6
. - In .NET 5 en in Windows 10 mei 2019 Update en latere versies, wordt het fragment afgedrukt
-1
. - In .NET 6 en latere versies worden het fragment afgedrukt
6
, maar ICU-bibliotheken worden nog steeds gebruikt.
Als u deze code wilt oplossen door een ordinale zoekopdracht uit te voeren in plaats van een cultuurgevoelige zoekopdracht, roept u de IndexOf(String, StringComparison) overbelasting aan en geeft u deze StringComparison.Ordinal door als argument.
U kunt codeanalyseregels CA1307 uitvoeren: Geef StringComparison op voor duidelijkheid en CA1309: Gebruik ordinaal StringComparison om deze aanroepsites in uw code te vinden.
Zie Gedragswijzigingen bij het vergelijken van tekenreeksen op .NET 5+ voor meer informatie.
Valutasymbool
Houd rekening met de volgende code waarmee een tekenreeks wordt opgemaakt met behulp van de valutanotatieaanduiding C
. De cultuur van de huidige thread is ingesteld op een cultuur die alleen de taal en niet het land of de regio bevat.
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de");
string text = string.Format("{0:C}", 100);
- In .NET Core 3.1 en eerdere versies in Windows is
"100,00 €"
de waarde van tekst. - In .NET 5 en latere versies in Windows 19H1 en latere versies is
"100,00 ¤"
de waarde van tekst, die gebruikmaakt van het internationale valutasymbool in plaats van de euro. In de ICU is het ontwerp dat een valuta een eigenschap is van een land of regio, geen taal.
Afkortingen van de dag van de week
De DateTimeFormatInfo.GetShortestDayName(DayOfWeek) methode verkrijgt de kortste verkorte dagnaam voor een opgegeven dag van de week.
- In .NET Core 3.1 en eerdere versies in Windows bestaan deze dag-van-week afkortingen uit twee tekens, bijvoorbeeld 'Su'.
- In .NET 5 en latere versies bestaan deze afkortingen van de dag van de week uit slechts één teken, bijvoorbeeld 'S'.
Reden voor wijziging
Deze wijziging is geïntroduceerd om elkaar te samenvoegen. Het globalisatiegedrag van NET voor alle ondersteunde besturingssystemen. Het biedt ook de mogelijkheid voor toepassingen om hun eigen globalisatiebibliotheken te bundelen in plaats van afhankelijk te zijn van de ingebouwde bibliotheken van het besturingssysteem.
Versie geïntroduceerd
.NET 5.0
Aanbevolen actie
Er is geen actie vereist voor het deel van de ontwikkelaar. Als u echter NLS Globalization-API's wilt blijven gebruiken, kunt u een runtime-switch instellen om terug te keren naar dat gedrag. Zie het artikel over .NET-globalisatie en ICU voor meer informatie over de beschikbare switches.
Betrokken API's
- System.Span<T>
- System.String
- De meeste typen in de System.Globalization naamruimte
- System.Array.Sort (bij het sorteren van een matrix met tekenreeksen)
- System.Collections.Generic.List<T>.Sort() (wanneer de lijstelementen tekenreeksen zijn)
- System.Collections.Generic.SortedDictionary<TKey,TValue> (wanneer de sleutels tekenreeksen zijn)
- System.Collections.Generic.SortedList<TKey,TValue> (wanneer de sleutels tekenreeksen zijn)
- System.Collections.Generic.SortedSet<T> (wanneer de set tekenreeksen bevat)