Base64.DecodeFromUtf8 メソッドは空白を無視する
Convert.FromBase64String(String) メソッド、Convert.FromBase64CharArray(Char[], Int32, Int32) メソッド、および対応する System.Convert の Try
メソッドでは、ASCII の空白文字 ' '、'\t'、'\r'、'\n' が無視されます。また、入力にはこのような空白を任意の数だけ含めることができます。 ただし、Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) メソッドと Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) メソッドが追加されたときは、これらの空白文字は無視されず、空白を含む入力はデコードできませんでした。 そのため、UTF16 ベースの API の動作は UTF8 ベースの API とは異なりました。 これは次のことも意味しました。
Base64.DecodeFromUtf8
メソッドとBase64.DecodeFromUtf8InPlace
メソッドでは、Convert.FromBase64String(String) で Base64FormattingOptions.InsertLineBreaks オプションを指定することによって生成された UTF エンコードの base-64 エンコード データをラウンドトリップできませんでした。- 新しい IsValid(ReadOnlySpan<Char>) メソッドと IsValid(ReadOnlySpan<Byte>) メソッドの動作は、互いに一致しないか、Convert および Base64 の UTF-16 および UTF-8 データの対応するメソッドと一致しない必要があります。
この変更により、DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) メソッドと DecodeFromUtf8InPlace(Span<Byte>, Int32) メソッドで入力の空白が無視されるようになりました。
以前の動作
Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) と Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) では、空白を含む入力の処理に失敗し、空白が見つかった場合は OperationStatus.InvalidData が返されます。
新しい動作
Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) と Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) では、入力の空白 (具体的には ' '、'\t'、'\r'、'\n') が無視されるようになりました。これは Convert.FromBase64String(String) の動作に一致します。
導入されたバージョン
.NET 8 Preview 5
破壊的変更の種類
この変更は、動作変更です。
変更理由
この変更が行われた理由は次のとおりです。
- Base64 メソッドは、次のようなより広い範囲の入力データをデコードできます。
- Convert.ToBase64String によって Base64FormattingOptions.InsertLineBreaks オプションを指定して生成されたデータ。
- 構成ファイルやその他の実際のデータ ソースに含まれるデータの一般的な書式設定。
- Base64 メソッドは、Convert の対応するデコード API と一致します。
- 新しい Base64.IsValid(ReadOnlySpan<Char>) API と Base64.IsValid(ReadOnlySpan<Byte>) API は、それらの動作が互いに一致し、既存の Convert API および Base64 API と一致する方法で追加できます。
推奨される操作
この新しい動作がコードで問題になる場合は、IndexOfAny(" \t\r\n"u8)
を呼び出して、以前は InvalidData の結果がトリガーされた入力の空白を検索できます。
影響を受ける API
.NET