Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Foi introduzida uma pequena alteração que afeta apenas as cargas úteis codificadas malformadas.
Antes do .NET 9, uma cadeia de caracteres codificada malformada [0x01, 0xC2] analisada com BinaryReader.ReadString() retornava 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. Essa alteração afeta apenas as cargas 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 snippet de código produz resultados diferentes para s == "\uFFFD" e s.Length, conforme mostrado nos comentários do 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 versão prévia 7
Tipo de alteração interruptiva
Esta é uma alteração comportamental.
Motivo da alteração
Essa alteração foi feita como uma melhoria no 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") no resultado.