У меня возникла проблема сравнения строк в Unit Test в С# 4.0 с использованием Visual Studio 2010. Этот же пример теста работает правильно в Visual Studio 2008 (с С# 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()
, что и должно было делать в первую очередь! Спасибо за помощь.