Base64.DecodeFromUtf8 方法忽略空格

System.Convert 上的 Convert.FromBase64String(String)Convert.FromBase64CharArray(Char[], Int32, Int32) 和相应的 Try 方法忽略 ASCII 空格字符“ ”、“\t”、“\r”和“\n”,并允许输入中存在任意数量的此类空格。 但是,添加 Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean)Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) 方法时,它们不会忽略这些空格字符,而是无法解码任何包含空格的输入。 这使得基于 UTF16 的 API 的行为不同于基于 UTF8 的 API 的行为。 这也意味着:

实施此更改后,DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean)DecodeFromUtf8InPlace(Span<Byte>, Int32) 方法现在忽略输入中的空格。

旧行为

Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean)Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) 原先无法处理包含空格的输入,如果遇到任何空格,则返回 OperationStatus.InvalidData

新行为

Base64.DecodeFromUtf8(ReadOnlySpan<Byte>, Span<Byte>, Int32, Int32, Boolean)Base64.DecodeFromUtf8InPlace(Span<Byte>, Int32) 现在忽略输入中的空格(特别是“ ”、“\t”、“\r”和“\n”),这与 Convert.FromBase64String(String) 的行为一致。

引入的版本

.NET 8 预览版 5

中断性变更的类型

此更改为行为更改

更改原因

此更改的目的是:

如果新行为对代码而言存在问题,则可以调用 IndexOfAny(" \t\r\n"u8),在输入中搜索以前会触发 InvalidData 结果的空格。

受影响的 API