Udostępnij za pośrednictwem


Metody Base64.DecodeFromUtf8 ignorują białe znaki

Metody Convert.FromBase64String(String), Convert.FromBase64CharArray(Char[], Int32, Int32)i odpowiadające Try im metody System.Convert ignorują znaki białych znaków ASCII " ", "\t", "\r" i "\n" i zezwalają na wprowadzanie dowolnej ilości takich białych znaków. Jednak po Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) dodaniu metod i Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) nie ignorowali tych znaków odstępów i zamiast tego nie dekodowali ż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 DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) metody 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) nie Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) można przetworzyć danych wejściowych zawierających białe znaki i zwracanych OperationStatus.InvalidData , jeśli napotkano jakiekolwiek białe znaki.

Nowe zachowanie

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

Wprowadzona wersja

.NET 8 (wersja zapoznawcza 5)

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

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

Jeśli nowe zachowanie jest problematyczne dla kodu, możesz wywołać metodę IndexOfAny(" \t\r\n"u8) wyszukiwania danych wejściowych dla białych znaków, które wcześniej wyzwoliły InvalidData wynik.

Dotyczy interfejsów API