将文件读入字节数组与字符串不同

时间:2011-04-19 11:53:25

标签: c# arrays string

我在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 个答案:

答案 0 :(得分:8)

鉴于你在问题中的最终评论,我怀疑问题是你在文件的开头有一个byte-order mark。请尝试加载这样的文件:

string jsonResponse = File.ReadAllText(filePath);

相信将为您剥离BOM。或者,您可以尝试自己明确修剪它:

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

答案 1 :(得分:4)

我的猜测是你的文件中有一个终止换行符。

您只需将其与a == b进行比较,即可轻松验证两个字符串在C#中是否具有相同的内容。

这是一个简短的代码示例,可以帮助您确定问题。字符串输出由< >包围,这可以帮助您识别周围的空格(顺便说一句,可以使用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 + ">");
}