BinaryReader.GetString() restituisce "\uFFFD" in sequenze in formato non valido
È stata introdotta una modifica di rilievo secondaria che influisce solo sui payload codificati in formato non valido.
Prima di .NET 9, una stringa [0x01, 0xC2]
codificata in formato non valido analizzata con BinaryReader.ReadString() ha restituito una stringa vuota.
A partire da .NET 9, BinaryReader.ReadString() restituisce "\uFFFD", che viene REPLACEMENT CHARACTER
usato per sostituire un carattere sconosciuto, non riconosciuto o non rappresentabile. Questa modifica influisce solo sui payload in formato non valido e corrisponde agli standard Unicode.
Comportamento precedente
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
}
Nuovo comportamento
A partire da .NET 9, lo stesso frammento di codice produce risultati diversi per s == "\uFFFD"
e s.Length
, come illustrato nei commenti di codice:
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
}
Versione introdotta
.NET 9 Anteprima 7
Tipo di modifica che causa un'interruzione
Questa è una modifica funzionale.
Motivo della modifica
Questa modifica è stata apportata come miglioramento delle prestazioni che influisce su uno scenario raro.
Azione consigliata
Se si desidera mantenere il comportamento precedente in cui la sequenza di byte incompleta è stata omessa alla fine della stringa, chiamare TrimEnd("\uFFFD")
sul risultato.