Sie müssen die richtige Kodierung für die Datei verwenden. Wissen Sie, welche Kodierung das ist? Es könnte UTF-16 sein, auch bekannt als Encoding.Unicode, oder möglicherweise etwas wie Big5. Sie sollten wirklich versuchen, das herauszufinden, anstatt nur zu raten.
Wie in der Antwort von leppie erwähnt, könnte das Problem auch in den Fähigkeiten der Konsole liegen. Um dies herauszufinden, geben Sie die Unicode-Zeichenwerte der Zeichenkette als Zahlen aus. Siehe mein Artikel zur Fehlersuche bei Unicode-Problemen für weitere Informationen und eine nützliche Methode zum Auslesen des Inhalts einer Zeichenkette.
Ich würde auch vermeiden, den Code zu verwenden, den Sie derzeit für das zeilenweise Lesen einer Datei verwenden. Verwenden Sie stattdessen etwas wie:
using (StreamReader sr = new StreamReader(path, appropriateEncoding))
{
string line;
while ( (line = sr.ReadLine()) != null)
{
// ...
}
}
Der Aufruf von Peek() setzt voraus, dass der Stream in der Lage ist zu suchen, was bei Dateien der Fall sein kann, aber nicht bei allen Streams. Schauen Sie auch in File.ReadAllText y File.ReadAllLines wenn Sie das tun wollen - es sind sehr praktische Hilfsmethoden.