2009-04-09 8 views
19

Ho un file con codifica ANSI e voglio convertire le righe che ho letto dal file in ASCII.Conversione di file di testo da ANSI ad ASCII usando C#

Come faccio a fare questo in C#?


EDIT: Che cosa succede se ho usato "BinaryReader" BinaryReader reader = new BinaryReader(input, Encoding.Default); ma questo lettore richiederà (Stream, Encoding) ma "Stream" è un estratto! E dove dovrei inserire il percorso del file da cui leggerà?

+0

Perché pensi di voler convertirlo in ASCII? La risposta potrebbe rivelare ciò che effettivamente dovresti convertire in ... – Guffa

risposta

30

Una conversione diretta da ANSI a ASCII potrebbe non essere sempre possibile, poiché ANSI è un superset di ASCII.

si può provare la conversione in UTF8 utilizzando Encoding, però:

Encoding ANSI = Encoding.GetEncoding(1252); 

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

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

Naturalmente è possibile sostituire UTF8 con ASCII, ma che in realtà non ha senso dal momento che:

  • se la stringa originale non contiene alcun byte> 126, quindi è già ASCII
  • se la stringa originale contiene uno o più byte> 126, quindi quei byte saranno persi

UPDATE:

In risposta alla domanda aggiornato, è possibile utilizzare BinaryReader come questo:

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

In sostanza, è necessario specificare un Encoding durante la lettura/scrittura del file. Per esempio:

// 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); 

Si noti che una volta che avete letto, è in realtà text unicode quando in memoria.

È possibile scegliere diverse code page utilizzando Encoding.GetEncoding.

+0

Buona risposta, in particolare per indicare che è possibile utilizzare i metodi File statici e non è necessario coinvolgere direttamente FileStreams o buffer. – Noldorin

Problemi correlati