2009-04-09 11 views
19

Ich habe eine ANSI-kodierte Datei, und ich möchte die Zeilen konvertieren, die ich aus der Datei in ASCII lesen.Konvertieren von Textdatei von ANSI nach ASCII mit C#

Wie gehe ich in C# dabei vor?


EDIT: Was passiert, wenn ich "Binary" BinaryReader reader = new BinaryReader(input, Encoding.Default); verwendet, aber dieser Leser nimmt (Stream, Encoding) aber "Stream" ist ein abstraktes! Und wo sollte ich den Pfad der Datei angeben, aus der er lesen wird?

+0

Warum glauben Sie, dass Sie es in ASCII konvertieren möchten? Die Antwort darauf kann zeigen, was Sie eigentlich in ... konvertieren sollten. – Guffa

Antwort

30

Eine direkte Konvertierung von ANSI nach ASCII ist möglicherweise nicht immer möglich, da ANSI eine Obermenge von ASCII ist.

können Sie versuchen, zu UTF8 Encoding verwenden, obwohl:

Encoding ANSI = Encoding.GetEncoding(1252); 

byte[] ansiBytes = ANSI.GetBytes(str); 
byte[] utf8Bytes = Encoding.Convert(ANSI, Encoding.UTF8, ansiBytes); 

String utf8String = Encoding.UTF8.GetString(utf8Bytes); 

Natürlich können Sie UTF8 mit ASCII ersetzen kann, aber das nicht wirklich Sinn machen, da:

  • wenn die ursprüngliche Zeichenfolge enthält kein Byte> 126, dann ist es bereits ASCII
  • Wenn die ursprüngliche Zeichenfolge ein oder mehrere Bytes> 126 enthält, gehen diese Bytes verloren

UPDATE:

Als Antwort auf die Frage aktualisiert, können Sie BinaryReader wie folgt verwenden:

BinaryReader reader = new BinaryReader(File.Open("foo.txt", FileMode.Open), 
             Encoding.GetEncoding(1252)); 
23

Grundsätzlich müssen Sie eine Encoding angeben, wenn das Lesen/Schreiben der Datei. Zum Beispiel:

// read with the **local** system default ANSI page 
string text = File.ReadAllText(path, Encoding.Default); 

// ** I'm not sure you need to do this next bit - it sounds like 
// you just want to read it? ** 

// write as ASCII (if you want to do this) 
File.WriteAllText(path2, text, Encoding.ASCII); 

Beachten Sie, dass, sobald Sie es gelesen haben, ist text tatsächlich Unicode, wenn im Speicher.

Sie können unter Encoding.GetEncoding verschiedene Codeseiten auswählen.

+0

Gute Antwort, insbesondere für den Hinweis, dass Sie die statischen File-Methoden verwenden können und nicht direkt mit FileStreams oder Puffern arbeiten müssen. – Noldorin

Verwandte Themen