开发者

Read file into byte array is different to string

I have a file in visual studio with the following contents:"{"Name"开发者_StackOverflow中文版:"Pete"}" If I read the file with the following code it appears to create a string with the original value:

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

However, the string is actually different to the version that exists if I use the following code:

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

Why? (The reason I think it is different is because when I pass each version to a json deserializer it behaves differently)

Thanks.


Given your final comment in the question, I suspect the problem is that you've got a byte-order mark at the start of the file. Try loading the file like this instead:

string jsonResponse = File.ReadAllText(filePath);

I believe that will strip the BOM for you. Alternatively, you could try explicitly trimming it yourself:

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


My guess would be that you have a terminating newline in your file.

You can easily verify if two strings have the same content in C# by just comparing them with a == b.

Here's a short code sample that might help you identify the problem. The strings are output surrounded by < >, which should help you identify surrounding whitespace (which, by the way, can be removed using 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 + ">");
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜