Metody Base64.DecodeFromUtf8 ignorují prázdné znaky
A Convert.FromBase64String(String)Convert.FromBase64CharArray(Char[], Int32, Int32)odpovídající Try
metody ignorují System.Convert prázdné znaky ASCII ' ', '\t', '\r' a '\n' a umožňují, aby všechny takové prázdné znaky byly ve vstupu. Při Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) přidání a Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) metod však tyto prázdné znaky ignorovaly a místo toho se nepodařilo dekódovat vstup, který obsahoval prázdné znaky. Tím se chování rozhraní API založených na UTF16 liší od chování rozhraní API založených na UTF8. To také znamenalo:
Base64.DecodeFromUtf8InPlace
MetodyBase64.DecodeFromUtf8
nemohly zaokrouhlovat data zakódovaná kódováním UTF-64 vytvořenou Convert.FromBase64String(String) pomocí Base64FormattingOptions.InsertLineBreaks možnosti.- Nové IsValid(ReadOnlySpan<Char>) a IsValid(ReadOnlySpan<Byte>) metody by buď musely mít chování nekonzistentní s ostatními, nebo s jejich odpovídajícími metodami pro data UTF-16 a UTF-8 na Convert a Base64.
Díky této změně DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) teď metody DecodeFromUtf8InPlace(Span<Byte>, Int32) ve vstupu ignorují prázdné znaky.
Předchozí chování
Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) a Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) nepodařilo se zpracovat vstup, který obsahoval prázdné znaky, a vrátil se OperationStatus.InvalidData , pokud došlo k nějakému prázdnému znaku.
Nové chování
Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean) a Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) teď ve vstupu ignorujte prázdné znaky (konkrétně ', '\t', '\r'a '\n'), které odpovídají chování Convert.FromBase64String(String).
Zavedená verze
.NET 8 Preview 5
Typ zásadní změny
Tato změna je změna chování.
Důvod změny
Změna byla provedena tak, aby:
- Metody Base64 mohou dekódovat širší škálu vstupních dat, včetně:
- Data vytvořená Convert.ToBase64String pomocí Base64FormattingOptions.InsertLineBreaks možnosti
- Běžné formátování dat v konfiguračních souborech a dalších skutečných zdrojích dat
- Metody Base64 jsou konzistentní s odpovídajícími dekódovacími rozhraními API pro Convert.
- Nová Base64.IsValid(ReadOnlySpan<Char>) rozhraní API a Base64.IsValid(ReadOnlySpan<Byte>) rozhraní API je možné přidat způsobem, ve kterém je jejich chování konzistentní s ostatními a s existujícími Convert rozhraními API a Base64 rozhraními API.
Doporučená akce
Pokud je nové chování pro váš kód problematické, můžete volat IndexOfAny(" \t\r\n"u8)
hledaný vstup pro prázdné znaky, které dříve aktivovaly InvalidData výsledek.
Ovlivněná rozhraní API
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro