Partilhar via


Os métodos Base64.DecodeFromUtf8 ignoram o espaço em branco

O Convert.FromBase64String(String), Convert.FromBase64CharArray(Char[], Int32, Int32)e os métodos correspondentes Try ignoram System.Convert os caracteres de espaço em branco ASCII ' ', '\t', '\r' e '\n' e permitem que qualquer quantidade desse espaço em branco esteja na entrada. No entanto, quando os Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) métodos e Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) foram adicionados, eles não ignoraram esses caracteres de espaço em branco e, em vez disso, falharam em decodificar qualquer entrada que incluísse espaço em branco. Isso tornou o comportamento das APIs baseadas em UTF16 diferente do das APIs baseadas em UTF8. Significou também que:

Com essa alteração, os métodos e DecodeFromUtf8InPlace(Span<Byte>, Int32) agora ignoram o DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) espaço em branco na entrada.

Comportamento anterior

Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) e Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) não conseguiu processar a entrada que continha espaço em branco e retornou OperationStatus.InvalidData se algum espaço em branco foi encontrado.

Novo comportamento

Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) e Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) agora ignore o espaço em branco (especificamente ' ', '\t', '\r' e '\n') na entrada, que corresponde ao comportamento do Convert.FromBase64String(String).

Versão introduzida

.NET 8 Visualização 5

Tipo de mudança de rutura

Esta mudança é uma mudança comportamental.

Razão para a alteração

A alteração foi feita de modo a que:

Se o novo comportamento for problemático para o seu código, você pode ligar IndexOfAny(" \t\r\n"u8) para pesquisar a entrada para o espaço em branco que anteriormente teria disparado um InvalidData resultado.

APIs afetadas