Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los 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.