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의 동작과 달라졌습니다. 이는 또한 다음을 의미했습니다.
Base64.DecodeFromUtf8
및Base64.DecodeFromUtf8InPlace
메서드는 Base64FormattingOptions.InsertLineBreaks 옵션으로 Convert.FromBase64String(String)에서 생성한 UTF로 인코딩된 base-64로 인코딩된 데이터를 왕복할 수 없습니다.- 새로운IsValid(ReadOnlySpan<Char>) 및 IsValid(ReadOnlySpan<Byte>) 메서드는 Convert 및 Base64의 UTF-16 및 UTF-8 데이터에 대해 서로 또는 해당 메서드와 일관되지 않는 동작을 가져야 합니다.
이 변경으로 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
호환성이 손상되는 변경의 형식
이 변경 사항은 동작 변경입니다.
변경 이유
이렇게 변경되었습니다.
- Base64 메서드는 다음을 포함하여 더 넓은 범위의 입력 데이터를 디코딩할 수 있습니다.
- Base64FormattingOptions.InsertLineBreaks 옵션을 사용하여 Convert.ToBase64String에서 생성된 데이터입니다.
- 구성 파일 및 기타 실제 데이터 원본에 있는 데이터의 일반적인 서식입니다.
- Base64 메서드는 Convert의 해당 디코딩 API와 일치합니다.
- 새 Base64.IsValid(ReadOnlySpan<Char>) 및 Base64.IsValid(ReadOnlySpan<Byte>) API는 동작이 서로 일치하고 기존 Convert 및 Base64 API와 일치하는 방식으로 추가할 수 있습니다.
권장 작업
새 동작이 코드에 문제가 있는 경우 IndexOfAny(" \t\r\n"u8)
를 호출하여 이전에 InvalidData 결과를 트리거한 공백에 대한 입력을 검색할 수 있습니다.
영향을 받는 API
.NET