Подтвердить что ты не робот

Чтение файла в байтовый массив отличается от строки

У меня есть файл в visual studio со следующим содержимым: "{" Name ":" Pete "}" Если я прочитаю файл со следующим кодом, он, как представляется, создает строку с исходным значением:

byte[] byteArray = System.IO.File.ReadAllBytes(filePath);
string jsonResponse = System.Text.Encoding.UTF8.GetString(byteArray);

Однако строка действительно отличается от версии, которая существует, если я использую следующий код:

string jsonResponse = "{\"Name\":\"Pete\"}";

Почему? (Причина, по-моему, отличается от того, что, когда я передаю каждую версию json deserializer, она ведет себя по-разному)

Спасибо.

4b9b3361

Ответ 1

Учитывая ваш последний комментарий в вопросе, я подозреваю, что проблема заключается в том, что у вас есть байтовый порядок в начале файл. Попробуйте загрузить файл следующим образом:

string jsonResponse = File.ReadAllText(filePath);

Я считаю, что это будет лишать спецификацию для вас. В качестве альтернативы вы можете попробовать выполнить прямое обрезание:

jsonResponse = jsonResponse.TrimStart('\feff');

Ответ 2

Я предполагаю, что у вас есть завершающая строка в вашем файле.

Вы можете легко проверить, имеют ли две строки один и тот же контент на С#, просто сравнивая их с a == b.

Вот пример короткого кода, который может помочь вам определить проблему. Строки выводятся в окружении < >, что должно помочь вам идентифицировать окружающие пробелы (которые, кстати, могут быть удалены с помощью String.Trim).

byte[] byteArray = System.IO.File.ReadAllBytes(filePath);
string fromFile = System.Text.Encoding.UTF8.GetString(byteArray);
string fromString = "{\"Name\":\"Pete\"}";

if (fromFile == fromString) {
    Console.WriteLine("Strings are the same.");
} else {
    Console.WriteLine("Strings are different!");
    Console.WriteLine("fromFile:   <" + fromFile + ">");
    Console.WriteLine("fromString: <" + fromString + ">");
}