„BinaryReader.GetString()“ gibt „\uFFFD“ für nicht wohlgeformte Sequenzen zurück.
Ein kleinerer Breaking Change wurde eingeführt, die sich nur auf nicht wohlgeformte codierte Nutzlasten auswirkt.
Vor .NET 9 hat eine nicht wohlgeformte codierte Zeichenfolge [0x01, 0xC2]
, die mit BinaryReader.ReadString() geparst wurde, eine leere Zeichenfolge zurückgegeben.
Ab .NET 9 gibt BinaryReader.ReadString() „\uFFFD“ zurück. Dabei handelt es sich um ein REPLACEMENT CHARACTER
-Element, das verwendet wird, um ein unbekanntes, nicht erkanntes oder nicht darstellbares Zeichen zu ersetzen. Diese Änderung wirkt sich nur auf nicht wohlgeformte Nutzlasten aus und entspricht Unicode-Standards.
Vorheriges Verhalten
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
}
Neues Verhalten
Ab .NET 9 erzeugt derselbe Codeausschnitt unterschiedliche Ergebnisse für s == "\uFFFD"
und s.Length
, wie in den Codekommentaren dargestellt:
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
}
Eingeführt in Version
.NET 9 Preview 7
Typ des Breaking Changes
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
Diese Änderung wurde als Leistungsverbesserung vorgenommen, die sich auf ein seltenes Szenario auswirkt.
Empfohlene Maßnahme
Wenn Sie das vorherige Verhalten beibehalten möchten, bei dem eine unvollständige Bytesequenz am Ende der Zeichenfolge weggelassen wurde, rufen Sie TrimEnd("\uFFFD")
für das Ergebnis auf.