Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En mindre icke-bakåtkompatibel ändring infördes som endast påverkar felaktigt kodade nyttolaster.
Före .NET 9 returnerades en felaktigt kodad sträng [0x01, 0xC2] som parsades med BinaryReader.ReadString() en tom sträng.
Från och med .NET 9 BinaryReader.ReadString() returneras "\uFFFD", som används REPLACEMENT CHARACTER för att ersätta ett okänt, okänt eller icke-representativt tecken. Den här ändringen påverkar endast felaktiga nyttolaster och matchar Unicode-standarder.
Tidigare beteende
var ms = new MemoryStream(new byte[] { 0x01, 0xC2 });
using (var br = new BinaryReader(ms))
{
    string s = br.ReadString();
    Console.WriteLine(s == "\uFFFD"); // false
    Console.WriteLine(s.Length); // 0
}
Nytt beteende
Från och med .NET 9 ger samma kodfragment olika resultat för s == "\uFFFD" och s.Length, som visas i kodkommentarerna:
var ms = new MemoryStream(new byte[] { 0x01, 0xC2 });
using (var br = new BinaryReader(ms))
{
    string s = br.ReadString();
    Console.WriteLine(s == "\uFFFD"); // true
    Console.WriteLine(s.Length); // 1
}
Version introducerad
Förhandsversion 7 av .NET 9
Typ av icke-bakåtkompatibel ändring
Den här ändringen är en beteendeförändring.
Orsak till ändringen
Den här ändringen gjordes som en prestandaförbättring som påverkar ett sällsynt scenario.
Rekommenderad åtgärd
Om du vill behålla det tidigare beteendet där ofullständig bytesekvens utelämnades i slutet av strängen anropar du TrimEnd("\uFFFD") resultatet.