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

10

我在Visual Studio中有一个文件,内容如下:"{"Name":"Pete"}" 如果使用以下代码读取该文件,似乎会创建一个包含原始值的字符串:

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

然而,如果我使用以下代码,实际上字符串与存在的版本是不同的:

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

为什么?(我认为不同的原因是,当我将每个版本传递给json反序列化器时,它的行为有所不同)

谢谢。


字符串有何不同之处? - Steven Jeuris
文件的确切内容是什么?你能够将其作为代码块发布而不包含任何引号(但包含文件中实际存在的引号),这样我们就可以确切地确定其内容了吗?此外,我假设它以UTF8格式保存了? - Marc Gravell
这是文件中的内容:{"Contact":"Pete"} 基本上它以括号开头,以括号结尾,并使用VS2008创建。 - Journeyman
1
那么解决方案就很简单:你的文件包含了“Contact”,而你的字符串包含了“Name”。;-) - Heinzi
@Heinzi - 有点像,但问题是我使用的JSON反序列化程序正在抱怨从文件中读取的版本。当我在调试窗口中查看它时,字符串看起来像这样: {"Contact":"Pete"} (在此评论中未显示括号前面有一个小点) - Journeyman
2个回答

8

根据你在问题中的最后一条评论,我怀疑问题在于文件开头有一个字节顺序标记。尝试使用以下方法加载文件:

string jsonResponse = File.ReadAllText(filePath);

我相信这将为您删除BOM。或者,您可以尝试明确地自行修剪:

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

4

我猜想您的文件中可能有一个终止的换行符。

在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 + ">");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接