Чтение файла в байтовый массив отличается от строки - PullRequest
10 голосов
/ 19 апреля 2011

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

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

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

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

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

Спасибо.

Ответы [ 2 ]

8 голосов
/ 19 апреля 2011

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

string jsonResponse = File.ReadAllText(filePath);

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

jsonResponse = jsonResponse.TrimStart('\feff');
4 голосов
/ 19 апреля 2011

Полагаю, в вашем файле есть завершающий символ новой строки.

Вы можете легко проверить, имеют ли две строки одинаковое содержимое в C #, просто сравнив их с 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 + ">");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...