Delen via


BinaryReader.ReadString() retourneert "\uFFFD" bij foutieve reeksen

Er is een kleine wijziging geïntroduceerd die alleen van invloed is op ongeldige gecodeerde nettoladingen.

Vóór .NET 9 werd een ongeldige gecodeerde tekenreeks [0x01, 0xC2] geparseerd met BinaryReader.ReadString() een lege tekenreeks geretourneerd.

Vanaf .NET 9 BinaryReader.ReadString() wordt '\uFFFD' geretourneerd. Dit wordt REPLACEMENT CHARACTER gebruikt om een onbekend, niet-herkend of onvertegenwoordigd teken te vervangen. Deze wijziging is alleen van invloed op ongeldige nettoladingen en komt overeen met Unicode-standaarden.

Vorig gedrag

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
}

Nieuw gedrag

Vanaf .NET 9 produceert hetzelfde codefragment verschillende resultaten voor s == "\uFFFD" en s.Length, zoals wordt weergegeven in de codeopmerkingen:

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
}

Versie geïntroduceerd

.NET 9 Preview 7

Type wijziging die fouten veroorzaken

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Deze wijziging is aangebracht als prestatieverbetering die van invloed is op een zeldzaam scenario.

Als u het vorige gedrag wilt behouden waarbij onvolledige bytereeks aan het einde van de tekenreeks is weggelaten, roept TrimEnd("\uFFFD") u het resultaat aan.

Betrokken API's