Convert.FromBase64String(String)のConvert.FromBase64CharArray(Char[], Int32, Int32)、Try
、および対応するSystem.Convertメソッドは、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 および Base64 API と一致する方法で追加できます。
推奨されるアクション
新しい動作がコードに問題を引き起こす場合は、IndexOfAny(" \t\r\n"u8)
を呼び出して、入力を検索し、以前に InvalidData 結果をトリガーした空白文字を見つけることができます。
影響を受ける API
.NET