Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Foi introduzida uma pequena alteração de quebra que afeta apenas cargas úteis codificadas malformadas.
Antes do .NET 9, uma cadeia de caracteres [0x01, 0xC2] codificada malformada que foi analisada com BinaryReader.ReadString() retornou uma cadeia de caracteres vazia.
A partir do .NET 9, BinaryReader.ReadString() retorna "\uFFFD", que é usado REPLACEMENT CHARACTER para substituir um caractere desconhecido, não reconhecido ou não representável. Esta alteração afeta apenas cargas úteis malformadas e corresponde aos padrões Unicode.
Comportamento anterior
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
}
Novo comportamento
A partir do .NET 9, o mesmo trecho de código produz resultados diferentes para s == "\uFFFD" e s.Length, conforme mostrado nos comentários de código:
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
}
Versão introduzida
.NET 9 Visualização 7
Tipo de mudança de rutura
Esta mudança é uma mudança comportamental.
Razão para a alteração
Essa alteração foi feita como uma melhoria de desempenho que afeta um cenário raro.
Ação recomendada
Se você quiser manter o comportamento anterior em que a sequência de bytes incompleta foi omitida no final da cadeia de caracteres, chame TrimEnd("\uFFFD") o resultado.