共用方式為


BinaryReader.GetString() 在格式錯誤的序列上傳回「\uFFFD」

引進了一項輕微的重大變更,只會影響錯誤編碼的承載。

在 .NET 9 之前,使用 BinaryReader.ReadString() 剖析錯誤編碼的字串 [0x01, 0xC2] 時,會傳回空字串。

從 .NET 9 開始,BinaryReader.ReadString() 會傳回「\uFFFD」,這是一個用於替換未知、無法識別或無法表示的字元的 REPLACEMENT CHARACTER。 這項變更只會影響格式錯誤的承載,並符合 Unicode 標準。

先前的行為

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
}

新的行為

從 .NET 9 開始,相同的程式碼片段會為 s == "\uFFFD"s.Length 產生不同的結果,如程式碼註解所示:

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
}

導入的版本

.NET 9 預覽 7

中斷性變更的類型

此變更為行為變更

變更原因

這項變更的目的是要改進效能,影響一個較為罕見的情況。

如果你想保留先前在字串結尾省略不完整位元組序列的行為,請在結果上呼叫 TrimEnd("\uFFFD")

受影響的 API