У меня проблема со сравнением строк в модульном тесте в C # 4.0 с использованием Visual Studio 2010. Этот же тестовый пример работает правильно в Visual Studio 2008 (с C # 3.5).
Вот соответствующий фрагмент кода:
byte[] rawData = GetData();
string data = Encoding.UTF8.GetString(rawData);
Assert.AreEqual("Constant", data, false, CultureInfo.InvariantCulture);
При отладке этого теста строка data
кажется невооруженным глазом содержащей точно такую же строку, что и литерал. Когда я позвонил data.ToCharArray()
, я заметил, что первый байт строки data
- это значение 65279
, которое представляет собой маркер порядка байтов UTF-8. Я не понимаю, почему Encoding.UTF8.GetString()
хранит этот байт.
Как мне заставить Encoding.UTF8.GetString()
до не поместить маркер порядка байтов в результирующую строку?
Обновление: Проблема заключалась в том, что GetData()
, который читает файл с диска, считывает данные из файла, используя FileStream.readbytes()
. Я исправил это, используя StreamReader
и преобразовав строку в байты, используя Encoding.UTF8.GetBytes()
, что и должно было быть в первую очередь! Спасибо за помощь.