Compartir a través de


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

Los métodos Convert.FromBase64String(String), Convert.FromBase64CharArray(Char[], Int32, Int32) y los correspondientes Try de System.Convert omiten los caracteres de espacio en blanco ASCII ' ', '\t', '\r' y '\n', y permiten cualquier cantidad de tal espacio en la entrada. Sin embargo, cuando se agregaron los Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) métodos y Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) , no ignoraron estos caracteres de espacio en blanco y, en su lugar, no pudieron descodificar ninguna entrada que incluya espacio en blanco. Esto hizo que el comportamiento de las API basadas en UTF16 difiere de la de las API basadas en UTF8. También significaba que:

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

Comportamiento anterior

Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) y Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) no pudieron procesar la entrada que contenía espacios en blanco y devolvieron OperationStatus.InvalidData si se encontró algún espacio en blanco.

Nuevo comportamiento

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

Versión introducida

.NET 8 Preview 5

Tipo de cambio disruptivo

Este es un cambio de comportamiento.

Motivo del cambio

El cambio se realizó para que:

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.

Las APIs afectadas