Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
- Los métodos
Base64.DecodeFromUtf8yBase64.DecodeFromUtf8InPlaceno pudieron recorrer los datos codificados en base 64 con codificación UTF generados por Convert.FromBase64String(String) con la opción Base64FormattingOptions.InsertLineBreaks. - Los nuevos métodos IsValid(ReadOnlySpan<Char>) y IsValid(ReadOnlySpan<Byte>) necesitarían tener comportamientos incoherentes entre sí o con sus métodos correspondientes para los datos UTF-16 y UTF-8 en Convert y Base64.
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:
- Los Base64 métodos pueden descodificar una gama más amplia de datos de entrada, entre los que se incluyen:
- Datos generados por Convert.ToBase64String con la Base64FormattingOptions.InsertLineBreaks opción .
- Formato común de datos en archivos de configuración y otros orígenes de datos reales.
- Los métodos Base64 son coherentes con las API de descodificación correspondientes en Convert.
- Las nuevas API Base64.IsValid(ReadOnlySpan<Char>) y Base64.IsValid(ReadOnlySpan<Byte>) podrían añadirse de una manera en que su comportamiento sea coherente entre sí y con las API Convert y Base64 existentes.
Acción recomendada
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.