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 Preview 7
破壊的変更の種類
この変更は、動作変更です。
変更理由
この変更は、まれなシナリオに影響するパフォーマンスの改善として行われました。
推奨される操作
以前の動作 (文字列の末尾で不完全なバイト シーケンスが省略されるという動作) を維持したい場合は、結果に対して TrimEnd("\uFFFD")
を呼び出します。
影響を受ける API
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET