Los métodos Base64.DecodeFromUtf8 omiten el espacio en blanco

Los métodos Convert.FromBase64String(String) y Convert.FromBase64CharArray(Char[], Int32, Int32), y los métodos Try correspondientes en System.Convert, omiten los caracteres ASCII de espacio en blanco " ", "\t", "\r" y "\n", y permiten que haya cualquier cantidad de espacios en blanco en la entrada. Sin embargo, cuando se agregaban los métodos Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) y Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32), no omitían los caracteres de espacio en blanco y no podían descodificar ninguna entrada que incluyera espacios en blanco. Esto hacía que el comportamiento de las API basadas en UTF16 fuera diferente al de las API basadas en UTF8. Esto también conllevaba lo siguiente:

Con este cambio, los métodos DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) y DecodeFromUtf8InPlace(Span<Byte>, Int32) ahora omiten el espacio en blanco en la entrada.

Comportamiento anterior

Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) y Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) no podían procesar una entrada que contuviese espacios en blanco y devolvían OperationStatus.InvalidData si se detectaba algún espacio en blanco.

Comportamiento nuevo

Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) y Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) ahora omiten el espacio en blanco (más concretamente, " ", "\t", "\r" y "\n") en la entrada, lo que coincide con el comportamiento de Convert.FromBase64String(String).

Versión introducida

.NET 8 (versión preliminar 5)

Tipo de cambio importante

Este es un cambio de comportamiento.

Motivo del cambio

El cambio se ha realizado para conseguir lo siguiente:

Si el nuevo comportamiento es problemático para el código, puede llamar a IndexOfAny(" \t\r\n"u8) para buscar en la entrada el espacio en blanco que anteriormente habría desencadenado un resultado InvalidData.

API afectadas