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.Length
jak 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ář.
Doporučená akce
Pokud chcete zachovat předchozí chování, kdy byla na konci řetězce vynechána neúplná sekvence bajtů, zavolejte TrimEnd("\uFFFD")
výsledek.