Comment ignorer le marqueur d'ordre d'octets UTF-8 dans les comparaisons de chaînes?

Je vais avoir un problème de comparaison de chaînes de caractères dans une Unité de Test en C# 4.0 à l'aide de Visual Studio 2010. Ce même cas de test fonctionne correctement dans Visual Studio 2008 (avec C# 3.5).

Voici le code snippet:

byte[] rawData = GetData();
string data = Encoding.UTF8.GetString(rawData);

Assert.AreEqual("Constant", data, false, CultureInfo.InvariantCulture);

Lors du débogage de ce test, le data chaîne apparaît à l'œil nu pour contenir exactement la même chaîne que le littéral. Quand j'ai appelé data.ToCharArray()j'ai remarqué que le premier octet de la chaîne data est la valeur 65279 qui est de l'UTF-8 Octets de Commande de Marqueur. Ce que je ne comprends pas, c'est pourquoi Encoding.UTF8.GetString() garde cet octet autour de.

Comment puis-je obtenir Encoding.UTF8.GetString() à pas placer l'Octet de Commande de Marqueur dans la chaîne résultante?

Mise à jour: Le problème était que GetData()qui lit un fichier à partir du disque, lit les données depuis le fichier à l'aide de FileStream.readbytes(). J'ai corrigé cela en utilisant un StreamReader et la conversion de la chaîne d'octets à l'aide de Encoding.UTF8.GetBytes()qui est ce qu'il aurait dû faire en premier lieu! Merci pour toute l'aide.

source d'informationauteur Skrud