Sdílet prostřednictvím


BinaryReader.GetString() vrátí "\uFFFD" u poškozených sekvencí.

Byla zavedena menší změna způsobující chybu, která má vliv pouze na poškozené zakódované datové části.

Před .NET 9 byl poškozený kódovaný řetězec [0x01, 0xC2] , který byl analyzován s vráceným prázdným řetězcem BinaryReader.ReadString() .

Počínaje rozhraním .NET 9 BinaryReader.ReadString() vrátí hodnotu \uFFFD, která slouží REPLACEMENT CHARACTER k nahrazení neznámého, nerozpoznaného nebo nerepresentovatelného znaku. Tato změna má vliv pouze na poškozené datové části a odpovídá standardům Unicode.

Předchozí chování

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
}

Nové chování

Počínaje rozhraním .NET 9 vytvoří stejný fragment kódu různé výsledky s == "\uFFFD" , s.Lengthjak je znázorněno v komentářích ke kódu:

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
}

Zavedená verze

.NET 9 Preview 7

Typ zásadní změny

Tato změna je změna chování.

Důvod změny

Tato změna byla provedena jako vylepšení výkonu, které má vliv na vzácný scénář.

Pokud chcete zachovat předchozí chování, kdy byla na konci řetězce vynechána neúplná sekvence bajtů, zavolejte TrimEnd("\uFFFD") výsledek.

Ovlivněná rozhraní API