Dela via


Base64.DecodeFromUtf8-metoder ignorerar mellanslag

Metoderna Convert.FromBase64String(String), Convert.FromBase64CharArray(Char[], Int32, Int32)och motsvarande TrySystem.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:

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:

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.

Berörda API:er