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

本文关键字:字符串 数组 字节数 文件 字节 | 更新日期: 2023-09-27 17:50:28

我在visual studio中有一个文件,内容如下:"{"Name":"Pete"}"如果我用下面的代码读取文件,它似乎创建了一个具有原始值的字符串:

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

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

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

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

谢谢。

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

考虑到您在问题中的最后注释,我怀疑问题是您在文件开头有一个字节顺序标记。试着这样加载文件:

string jsonResponse = File.ReadAllText(filePath);

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

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

我猜你的文件中有一个结束换行符。

您可以很容易地验证两个字符串在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 + ">");
}