Base64.DecodeFromUtf8-methoden negeren witruimte
De Convert.FromBase64String(String)methoden , Convert.FromBase64CharArray(Char[], Int32, Int32)en bijbehorende Try
methoden voor System.Convert het negeren van de ASCII-witruimtetekens ' ', '\t', '\r' en '\n' en toestaan dat een willekeurige hoeveelheid van deze witruimte in de invoer staat. Wanneer de Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) en Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) methoden echter werden toegevoegd, negeerden ze deze witruimtetekens niet en decodeerden ze in plaats daarvan geen invoer die witruimte bevatte. Hierdoor is het gedrag van de op UTF16 gebaseerde API's anders dan die van de op UTF8 gebaseerde API's. Het betekende ook dat:
- De
Base64.DecodeFromUtf8
enBase64.DecodeFromUtf8InPlace
methoden konden de met UTF gecodeerde base-64 gecodeerde gegevens die door Convert.FromBase64String(String) de Base64FormattingOptions.InsertLineBreaks optie zijn geproduceerd, niet afronden. - De nieuwe IsValid(ReadOnlySpan<Char>) methoden IsValid(ReadOnlySpan<Byte>) moeten gedrag inconsistent met elkaar hebben of met de bijbehorende methoden voor UTF-16- en UTF-8-gegevens op Convert en Base64.
Met deze wijziging negeren de DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) en DecodeFromUtf8InPlace(Span<Byte>, Int32) methoden nu witruimte in de invoer.
Vorig gedrag
Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) en Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) kan geen invoer verwerken die witruimte bevatte en geretourneerd OperationStatus.InvalidData als er een witruimte is opgetreden.
Nieuw gedrag
Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) en Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) negeer nu witruimte (met name ' ', '\t', '\r' en '\n') in de invoer, die overeenkomt met het gedrag van Convert.FromBase64String(String).
Versie geïntroduceerd
.NET 8 Preview 5
Type wijziging die fouten veroorzaken
Deze wijziging is een gedragswijziging.
Reden voor wijziging
De wijziging is aangebracht, zodat:
- De Base64 methoden kunnen een breder scala aan invoergegevens decoderen, waaronder:
- Gegevens die door Convert.ToBase64String de Base64FormattingOptions.InsertLineBreaks optie worden geproduceerd.
- Algemene opmaak van gegevens in configuratiebestanden en andere echte gegevensbronnen.
- De Base64 methoden zijn consistent met de bijbehorende decoderings-API's op Convert.
- De nieuwe Base64.IsValid(ReadOnlySpan<Char>) api's kunnen Base64.IsValid(ReadOnlySpan<Byte>) worden toegevoegd op een manier waarop hun gedrag consistent is met elkaar en met de bestaande Convert API's Base64 .
Aanbevolen actie
Als het nieuwe gedrag problematisch is voor uw code, kunt u aanroepen IndexOfAny(" \t\r\n"u8)
om de invoer voor de witruimte te doorzoeken die eerder een InvalidData resultaat zou hebben geactiveerd.