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:
- Metody
Base64.DecodeFromUtf8
iBase64.DecodeFromUtf8InPlace
nie mogły zaokrąglić zakodowanych w formacie UTF danych zakodowanych w formacie base-64 utworzonych za pomocą Base64FormattingOptions.InsertLineBreaksConvert.FromBase64String(String) opcji . - Nowe IsValid(ReadOnlySpan<Char>) metody i IsValid(ReadOnlySpan<Byte>) muszą 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 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:
- Metody Base64 mogą dekodować szerszy zakres danych wejściowych, w tym:
- Dane generowane za pomocą Convert.ToBase64StringBase64FormattingOptions.InsertLineBreaks opcji .
- Typowe formatowanie danych w plikach konfiguracji i innych rzeczywistych źródłach danych.
- Metody Base64 są spójne z odpowiednimi interfejsami API dekodowania w systemie Convert.
- Nowe Base64.IsValid(ReadOnlySpan<Char>) interfejsy API i Base64.IsValid(ReadOnlySpan<Byte>) można dodać w sposób, w którym ich zachowanie jest spójne ze sobą oraz z istniejącymi Convert interfejsami API i Base64 .
Zalecana akcja
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.