2009-03-12 7 views
1

Ich habe jetzt ein Problem, bei dem das Celsius-Symbol als C anstelle von ° C gelesen wird.Dateicodierung beim Lesen einer Datei mit StreamReader

Sieht aus wie die Codierung der Schuldige. Ich habe versucht, dies zu tun:

  using (StreamReader sr = new StreamReader(this._inFilePath,System.Text.Encoding.Unicode ,true)) 

statt

  using (StreamReader sr = new StreamReader(this._inFilePath)) 

aber ich bin jetzt Müll bekommen .... nicht die ursprüngliche Datei-Codierung haben die Stream Codierung übereinstimmen? Ich benutze kompaktes Framework 2.0.

Ich habe this online gefunden, aber wenn ich dies verwende, habe ich alles in ein Bytearray gelesen, erkenne das Ende jeder Zeile, konvertiere es in Unicode und fahre dann mit einer Programmlogik fort. Hat jemand diese Klasse benutzt?

+0

Was war die ursprüngliche Datei-Codierung? –

+0

utf-8. Wenn ich die utf-8 als Parameter an den streamreader übergeben, werden die Daten gelesen, aber Celsius wird C – sarsnake

+1

also muss die Datei in Unicode gespeichert werden, um in Unicode gelesen zu werden? Entschuldige die blöde Frage – sarsnake

Antwort

2

Ja, Sie müssen die richtige Kodierung angeben, wenn Sie Ihren StreamReader erstellen. .NET kann möglicherweise die Codierung für Sie erkennen. Es gibt Überladungen für den StreamReader-Konstruktor, die einen booleschen Parameter verwenden, mit dem Sie dieses Verhalten anfordern können.

public Stream (string Pfad, bool detectEncodingFromByteOrderMarks)

+0

Wenn ich also möchte, dass die Datei in Unicode gelesen wird, muss ich sie zuerst in Unicode speichern, richtig? – sarsnake

+0

Wie mache ich das ??? – sarsnake

+1

Sie müssen eine Codierung verwenden, die Unicode unterstützt. Normalerweise ist dies UTF-8 oder UTF-16 (in .NET "Unicode" genannt). Stellen Sie sicher, dass Sie weder ASCII noch ANSI (Encoding.Default) verwenden. Sie könnten eine weitere Frage zum Speichern von Dateien stellen und Ihre Situation genauer beschreiben. –