Freigeben über


„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.

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.

Betroffene APIs