Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Было введено незначительное критическое изменение, которое влияет только на неправильно сформированные полезные данные в кодировке.
До .NET 9 кодированная строка [0x01, 0xC2] , которая была проанализирована с BinaryReader.ReadString() возвращаемой пустой строкой.
Начиная с .NET 9, BinaryReader.ReadString() возвращает значение \uFFFD, которое REPLACEMENT CHARACTER используется для замены неизвестного, неузнаваемого или непреднаставимого символа. Это изменение влияет только на неправильные полезные данные и соответствует стандартам Юникода.
Прежнее поведение
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") результат.