Чтение файла в байтовый массив отличается от строки
У меня есть файл в 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, она ведет себя по-разному)
Спасибо.
Ответы
Ответ 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 + ">");
}