Tengo un problema al comparar cadenas en una prueba unitaria en C# 4.0 con Visual Studio 2010. Este mismo caso de prueba funciona correctamente en Visual Studio 2008 (con C# 3.5).¿Cómo ignoro el marcador de orden de bytes UTF-8 en las comparaciones de cadenas?
He aquí el fragmento de código relevante:
byte[] rawData = GetData();
string data = Encoding.UTF8.GetString(rawData);
Assert.AreEqual("Constant", data, false, CultureInfo.InvariantCulture);
Mientras se depura esta prueba, la cadena data
parece a simple vista para contener exactamente la misma cadena que el literal. Cuando llamé al data.ToCharArray()
, noté que el primer byte de la cadena data
es el valor 65279
que es el marcador de orden de bytes UTF-8. Lo que no entiendo es por qué Encoding.UTF8.GetString()
mantiene este byte alrededor.
¿Cómo consigo Encoding.UTF8.GetString()
a no poner el marcador de orden de bytes en la cadena resultante?
Actualización: El problema era que GetData()
, que lee un archivo desde el disco, lee los datos desde el archivo con FileStream.readbytes()
. Corregí esto usando un StreamReader
y convirtiendo la cadena a bytes usando Encoding.UTF8.GetBytes()
, ¡que es lo que debería haber estado haciendo en primer lugar! Gracias por toda la ayuda.
Se puede publicar un pequeño, pero completo, programa que demuestra el problema? –