Base64.DecodeFromUtf8 方法忽略空格

Convert.FromBase64String(String)Convert.FromBase64CharArray(Char[], Int32, Int32)以及Try上相应的System.Convert方法会忽略 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