Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Было введено незначительное критическое изменение, которое влияет только на неправильно сформированные полезные данные в кодировке.
До .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") результат.