Métodos Base64.DecodeFromUtf8 ignoram espaço em branco

Os métodos Convert.FromBase64String(String), Convert.FromBase64CharArray(Char[], Int32, Int32) e Try correspondentes no System.Convert ignoram 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 métodos Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) 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. Isso também significava que:

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

Comportamento anterior

Houve falha em Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) e Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) ao processar a entrada que continha espaço em branco e retornava OperationStatus.InvalidData se algum espaço em branco fosse encontrado.

Novo comportamento

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

Versão introduzida

.NET 8 versão prévia 5

Tipo de alteração interruptiva

Esta é uma alteração comportamental.

Motivo da alteração

A alteração foi feita para que:

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

APIs afetadas