Freigeben über


Base64.DecodeFromUtf8-Methoden ignorieren Leerzeichen

Die Convert.FromBase64String(String)-, Convert.FromBase64CharArray(Char[], Int32, Int32)- und entsprechenden Try-Methoden für System.Convert ignorieren die ASCII-Leerzeichen „ “„,“, „\t“, „\r“ und „\n“ und lassen eine beliebige Anzahl solcher Leerzeichen in der Eingabe zu. Als jedoch die Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean)- und Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32)-Methoden hinzugefügt wurden, ignorierten sie diese Leerzeichen nicht und schlugen stattdessen bei der Decodierung jeder Leerzeichen enthaltenden Eingabe fehl. Dadurch unterschied sich das Verhalten der UTF16-basierten APIs von dem der UTF8-basierten APIs. Außerdem bedeutete dies Folgendes:

Dank dieser Änderung ignorieren die Methoden DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) und DecodeFromUtf8InPlace(Span<Byte>, Int32) nun Leerzeichen in der Eingabe.

Vorheriges Verhalten

Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) und Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) konnte keine Eingabe verarbeiten, die Leerzeichen enthielt, und OperationStatus.InvalidData wurde zurückgegeben, wenn Leerzeichen gefunden wurden.

Neues Verhalten

Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) und Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) ignorieren jetzt Leerzeichen (insbesondere „ “„,“, „\t“, „\r“ und „\n“) in der Eingabe, was dem Verhalten von Convert.FromBase64String(String) entspricht.

Eingeführt in Version

.NET 8 Vorschauversion 5

Typ des Breaking Changes

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Die Änderung wurde aus folgenden Gründen vorgenommen:

Wenn das neue Verhalten für Ihren Code problematisch ist, können Sie IndexOfAny(" \t\r\n"u8) aufrufen, um die Eingabe nach dem Leerzeichen zu durchsuchen, das zuvor das Ergebnis InvalidData ausgelöst hätte.

Betroffene APIs