Les méthodes Base64.DecodeFromUtf8 ignorent les espaces blancs
Les méthodes Convert.FromBase64String(String), Convert.FromBase64CharArray(Char[], Int32, Int32) et les méthodes Try
correspondantes sur System.Convert ignorent les espaces blancs ASCII ' ', '\t', '\r' et '\n', et autorisent un nombre illimité d’espaces blancs dans l’entrée. Toutefois, si les méthodes Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) et Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) ont été ajoutées, elles n’ont pas ignoré ces espaces blancs et n’ont pas pu décoder les entrées qui incluaient des espaces blancs. Ainsi, le comportement des API basées sur UTF16 était différent de celui des API basées sur UTF8. Cela signifiait également que :
- Les méthodes
Base64.DecodeFromUtf8
etBase64.DecodeFromUtf8InPlace
ne pouvaient pas effectuer d’aller-retour avec les données encodées en base 64 et UTF produites par Convert.FromBase64String(String) avec l’option Base64FormattingOptions.InsertLineBreaks. - Les nouvelles méthodes IsValid(ReadOnlySpan<Char>) et IsValid(ReadOnlySpan<Byte>) doivent avoir un comportement incohérent les unes avec les autres ou avec leurs méthodes correspondantes pour les données UTF-16 et UTF-8 sur Convert et Base64.
Avec ce changement, les méthodes DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) et DecodeFromUtf8InPlace(Span<Byte>, Int32) ignorent désormais les espaces blancs dans l’entrée.
Comportement précédent
Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) et Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) ne pouvaient pas traiter l’entrée contenant des espaces blancs et retournaient OperationStatus.InvalidData en présence d’un espace blanc.
Nouveau comportement
Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) et Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) ignorent désormais les espaces blancs (spécifiquement ' ', '\t', '\r' et '\n') dans l’entrée, ce qui correspond au comportement de Convert.FromBase64String(String).
Version introduite
.NET 8 Preview 5
Type de changement cassant
Ce changement est un changement de comportement.
Raison du changement
Le changement a été apporté de sorte que :
- Les méthodes Base64 peuvent décoder un plus large éventail de données d’entrée, notamment :
- Les données générées par Convert.ToBase64String avec l’option Base64FormattingOptions.InsertLineBreaks.
- Mise en forme courante des données dans les fichiers de configuration et autres sources de données réelles.
- Les méthodes Base64 sont cohérentes avec les API de décodage correspondantes sur Convert.
- Les nouvelles API Base64.IsValid(ReadOnlySpan<Char>) et Base64.IsValid(ReadOnlySpan<Byte>) peuvent être ajoutées de manière à ce que leurs comportements soient cohérents entre eux ainsi qu’avec les API Convert et Base64 existantes.
Action recommandée
Si le nouveau comportement est problématique pour votre code, vous pouvez appeler IndexOfAny(" \t\r\n"u8)
pour rechercher dans l’entrée l’espace blanc qui aurait précédemment déclenché un résultat InvalidData.