Warum ist die Datei.ReadAllBytes anderen Ergebnis als bei der Verwendung von Datei.ReadAllText?
Ich habe eine text-Datei (UTF-8-Codierung) mit dem Inhalt "test". Ich versuche mir das byte-array aus dieser Datei und konvertieren zu einem string, aber es enthält einen seltsamen Charakter. Ich verwende den folgenden code:
var path = @"C:\Users\Tester\Desktop\test\test.txt"; //UTF-8
var bytes = File.ReadAllBytes(path);
var contents1 = Encoding.UTF8.GetString(bytes);
var contents2 = File.ReadAllText(path);
Console.WriteLine(contents1); //result is "?test"
Console.WriteLine(contents2); //result is "test"
conents1
ist anders als contents2
- warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erläutert in
ReadAllText
's-Dokumentation:Also die Datei enthält eine Stückliste (Byte order mark), und
ReadAllText
Methode richtig interpretiert, während die erste Methode nur liest plain bytes, ohne Sie zu interpretieren überhaupt.- Kodierung.GetString
sagt, dass es nur noch:(Hervorhebung von mir). Das ist natürlich nicht ganz schlüssig, aber dein Beispiel zeigt, dass dies wörtlich genommen werden.
Sind Sie wahrscheinlich zu sehen, die Unicode BOM (byte order mark) an den Anfang der Datei.
File.ReadAllText
weiß, wie Streifen diese ab, aberEncoding.UTF8
nicht.(int)contents1[0]
Sie werden sehen, dass dieser char ist das BOM-Zeichen. Mehr info: stackoverflow.com/questions/6784799/what-is-this-char-65279Es ist die UTF8-Codierung Präfix-string. Es markiert die Datei als UTF8 codiert ist.
ReadAllText
nicht zurück, weil es zu einem parsing-Anweisung.