다음을 통해 공유


BinaryReader.ReadString()은 형식이 잘못된 시퀀스에서 "\uFFFD"를 반환합니다.

잘못된 형식의 인코딩된 페이로드에만 영향을 주는 사소한 주요 변경 사항이 도입되었습니다.

.NET 9 이전에는, 잘못된 형식의 인코딩된 문자열 [0x01, 0xC2]을(를) BinaryReader.ReadString()(으)로 구문 분석했을 때 빈 문자열을 반환했습니다.

.NET 9부터, BinaryReader.ReadString()은(는) 알 수 없거나 인식할 수 없거나 표시할 수 없는 문자를 대체하기 위해 REPLACEMENT CHARACTER이(가) 사용했던 "\uFFFD"를 반환합니다. 이러한 변경 사항은 잘못된 형식의 페이로드에만 영향을 미치고 유니코드 표준과 일치합니다.

이전 동작

var ms = new MemoryStream(new byte[] { 0x01, 0xC2 });
using (var br = new BinaryReader(ms))
{
    string s = br.ReadString();
    Console.WriteLine(s == "\uFFFD"); // false
    Console.WriteLine(s.Length); // 0
}

새 동작

.NET 9부터, 다음과 같은 코드 주석에 표시된 것처럼 동일한 코드 조각이 s == "\uFFFD"s.Length에 대한 다른 결과를 생성합니다.

var ms = new MemoryStream(new byte[] { 0x01, 0xC2 });
using (var br = new BinaryReader(ms))
{
    string s = br.ReadString();
    Console.WriteLine(s == "\uFFFD"); // true
    Console.WriteLine(s.Length); // 1
}

도입된 버전

.NET 9 미리 보기 7

호환성이 손상되는 변경의 형식

이 변경 사항은 동작 변경입니다.

변경 이유

이 변경 사항은 드문 경우에 영향을 미치는 성능 향상으로 이루어졌습니다.

결과로 TrimEnd("\uFFFD")을(를) 호출하면 문자열의 끝에서 불완전한 바이트 시퀀스가 생략된 이전 동작을 유지할 수 있습니다.

영향을 받는 API