Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
- Metody
Base64.DecodeFromUtf8iBase64.DecodeFromUtf8InPlacenie mogły dokonać rundtripu danych zakodowanych w formacie base-64, a następnie zakodowanych w UTF, utworzonych przez Convert.FromBase64String(String) z opcją Base64FormattingOptions.InsertLineBreaks. - Nowe metody IsValid(ReadOnlySpan<Char>) i IsValid(ReadOnlySpan<Byte>) musiałyby mieć zachowanie niespójne ze sobą lub z odpowiednimi metodami dla danych UTF-16 i UTF-8 w systemach Convert i Base64.
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:
- Metody Base64 mogą dekodować szerszy zakres danych wejściowych, w tym:
- Dane generowane przez Convert.ToBase64String z opcją Base64FormattingOptions.InsertLineBreaks.
- Typowe formatowanie danych w plikach konfiguracji i innych rzeczywistych źródłach danych.
- Metody Base64 są spójne z odpowiednimi API dekodowania na Convert.
- Nowe Base64.IsValid(ReadOnlySpan<Char>) interfejsy API i Base64.IsValid(ReadOnlySpan<Byte>) interfejsy API można dodać w sposób, aby ich zachowanie było spójne ze sobą oraz z istniejącymi Convert interfejsami API i Base64 interfejsami API.
Zalecana akcja
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.