Udostępnij przez


Metody Base64.DecodeFromUtf8 ignorują białe znaki

Metody Convert.FromBase64String(String), Convert.FromBase64CharArray(Char[], Int32, Int32) i odpowiadające im metody Try na System.Convert ignorują białe znaki ASCII, takie jak " ", "\t", "\r" i "\n", oraz pozwalają na dowolną ilość takich białych znaków w danych wejściowych. Jednak gdy metody Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) i Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) zostały dodane, nie ignorowały tych znaków odstępu i zamiast tego nie dekodowały żadnych danych wejściowych, które obejmowały białe znaki. To sprawiło, że zachowanie interfejsów API opartych na protokole UTF16 różniło się od interfejsów API opartych na protokole UTF8. Oznaczało to również, że:

Dzięki tej zmianie metody DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) i DecodeFromUtf8InPlace(Span<Byte>, Int32) ignorują teraz białe znaki w danych wejściowych.

Poprzednie zachowanie

Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) i Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) nie zdołały przetworzyć danych wejściowych zawierających odstępy i zwracały OperationStatus.InvalidData, jeśli napotkano jakiekolwiek odstępy.

Nowe zachowanie

Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) i Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) teraz ignorują znaki białe (w szczególności ' ', '\t', '\r' i '\n') w danych wejściowych, co odpowiada zachowaniu Convert.FromBase64String(String).

Wersja wprowadzona

.NET 8 (wersja zapoznawcza 5)

Typ zmiany przełamującej

Ta zmiana jest zmianą behawioralną.

Przyczyna zmiany

Zmiana została wprowadzona w taki sposób, aby:

Jeśli nowe zachowanie jest problematyczne dla twojego kodu, możesz wywołać IndexOfAny(" \t\r\n"u8), aby wyszukiwać dane wejściowe w poszukiwaniu białych znaków, które wcześniej powodowały wynik InvalidData.

Interfejsy API, których dotyczy problem