Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Se introdujo un cambio importante menor que solo afecta a las cargas codificadas con formato incorrecto.
Antes de .NET 9, una cadena codificada con formato incorrecto [0x01, 0xC2] que se analizaba con BinaryReader.ReadString() devolvía una cadena vacía.
A partir de .NET 9, BinaryReader.ReadString() devuelve "\uFFFD", que es el REPLACEMENT CHARACTER que se usa para reemplazar un carácter desconocido, no reconocido o no representativo. Este cambio solo afecta a las cargas con formato incorrecto y coincide con los estándares Unicode.
Comportamiento 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
}
Comportamiento nuevo
A partir de .NET 9, el mismo fragmento de código genera resultados diferentes para s == "\uFFFD" y s.Length, como se muestra en los comentarios 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
}
Versión introducida
.NET 9 (versión preliminar 7)
Tipo de cambio importante
Este es un cambio de funcionamiento.
Motivo del cambio
Este cambio se realizó como una mejora del rendimiento que afecta a un escenario poco frecuente.
Acción recomendada
Si desea mantener el comportamiento anterior en el que se omitió la secuencia de bytes incompleta al final de la cadena, llame a TrimEnd("\uFFFD") en el resultado.