Aracılığıyla paylaş


BinaryReader.ReadString() yanlış biçimlendirilmiş dizilerde "\uFFFD" döndürür

Yalnızca hatalı biçimlendirilmiş kodlanmış yükleri etkileyen küçük bir hataya neden olan değişiklik yapıldı.

.NET 9'un öncesinde, ile [0x01, 0xC2] ayrıştırılan yanlış biçimlendirilmiş kodlanmış bir dize BinaryReader.ReadString() boş bir dize döndürdü.

.NET 9'dan başlayarak bilinmeyen, BinaryReader.ReadString() tanınmayan veya tanınmayan bir karakteri değiştirmek için kullanılan "\uFFFD" REPLACEMENT CHARACTER döndürür. Bu değişiklik yalnızca hatalı biçimlendirilmiş yükleri etkiler ve Unicode standartlarıyla eşleşir.

Önceki davranış

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
}

Yeni davranış

.NET 9'dan başlayarak, kod açıklamalarında gösterildiği gibi aynı kod parçacığı ve s == "\uFFFD"için s.Length farklı sonuçlar üretir:

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
}

Sürüm kullanıma sunulmuştur

.NET 9 Önizleme 7

Hataya neden olan değişikliğin türü

Bu değişiklik davranışsal bir değişikliktir.

Değişiklik nedeni

Bu değişiklik, nadir bir senaryoya etki eden bir performans geliştirmesi olarak yapılmıştır.

Dizenin sonunda eksik bayt dizisinin atlandığı önceki davranışı korumak istiyorsanız, sonucu çağırın TrimEnd("\uFFFD") .

Etkilenen API’ler