次の方法で共有


Base64.DecodeFromUtf8 メソッドは空白を無視する

Convert.FromBase64String(String) メソッド、Convert.FromBase64CharArray(Char[], Int32, Int32) メソッド、および対応する System.ConvertTry メソッドでは、ASCII の空白文字 ' '、'\t'、'\r'、'\n' が無視されます。また、入力にはこのような空白を任意の数だけ含めることができます。 ただし、Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) メソッドと Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) メソッドが追加されたときは、これらの空白文字は無視されず、空白を含む入力はデコードできませんでした。 そのため、UTF16 ベースの API の動作は UTF8 ベースの API とは異なりました。 これは次のことも意味しました。

この変更により、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

破壊的変更の種類

この変更は、動作変更です。

変更理由

この変更が行われた理由は次のとおりです。

この新しい動作がコードで問題になる場合は、IndexOfAny(" \t\r\n"u8) を呼び出して、以前は InvalidData の結果がトリガーされた入力の空白を検索できます。

影響を受ける API