Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Metoderna Convert.FromBase64String(String), Convert.FromBase64CharArray(Char[], Int32, Int32)och motsvarande Try på System.Convert ignorerar ASCII-blankstegstecken ' ', '\t', '\r' och '\n' och tillåter att någon mängd av sådana blanksteg finns i indata. Men när Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) metoderna och Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) lades till ignorerade de inte dessa blankstegstecken och kunde i stället inte avkoda indata som inkluderade blanksteg. Det gjorde beteendet för UTF16-baserade API:er annorlunda än för UTF8-baserade API:er. Det innebar också att:
- Metoderna
Base64.DecodeFromUtf8ochBase64.DecodeFromUtf8InPlacekunde inte korrekt avkoda och återställa de UTF-kodade base-64-kodade data som producerades av Convert.FromBase64String(String) med alternativet Base64FormattingOptions.InsertLineBreaks. - De nya IsValid(ReadOnlySpan<Char>) metoderna och IsValid(ReadOnlySpan<Byte>) metoderna skulle antingen behöva ha ett beteende som är inkonsekvent med varandra eller med deras motsvarande metoder för UTF-16- och UTF-8-data på Convert och Base64.
Med den här ändringen ignorerar metoderna DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) och DecodeFromUtf8InPlace(Span<Byte>, Int32) nu blanksteg i indata.
Tidigare beteende
Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) och Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) misslyckades med att bearbeta indata som innehöll blanksteg och returnerade OperationStatus.InvalidData om något blanksteg påträffades.
Nytt beteende
Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) och Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) ignorerar nu blanksteg (specifikt ' ', '\t', '\r' och '\n') i inmatningen, vilket matchar beteendet hos Convert.FromBase64String(String).
Version lanserad
Förhandsversion 5 av .NET 8
Typ av brytande ändring
Den här ändringen är en beteendeförändring.
Orsak till ändring
Ändringen gjordes så att:
- Metoderna Base64 kan avkoda ett större antal indata, inklusive:
- Data som produceras av Convert.ToBase64String med alternativet Base64FormattingOptions.InsertLineBreaks .
- Vanlig formatering av data i konfigurationsfiler och andra verkliga datakällor.
- Metoderna Base64 är konsekventa med motsvarande avkodnings-API:er på Convert.
- De nya Base64.IsValid(ReadOnlySpan<Char>) API:erna och Base64.IsValid(ReadOnlySpan<Byte>) api:erna kan läggas till på ett sätt där deras beteende är konsekvent med varandra och med befintliga Convert API:er och Base64 API:er.
Rekommenderad åtgärd
Om det nya beteendet är problematiskt för koden kan du anropa IndexOfAny(" \t\r\n"u8) för att söka i indata efter det blanksteg som tidigare skulle ha utlöst ett InvalidData-resultat.