2009-04-09 710 views
19

Tengo un archivo con codificación ANSI, y quiero convertir las líneas que leí del archivo a ASCII.Convirtiendo archivo de texto de ANSI a ASCII usando C#

¿Cómo hago esto en C#?


EDIT: ¿Qué pasa si he usado "BinaryReader" BinaryReader reader = new BinaryReader(input, Encoding.Default); pero este lector toma (Stream, Codificación) pero "Stream" es un resumen! ¿Y dónde debería poner la ruta del archivo del que leerá?

+0

¿Por qué crees que quieres convertirlo a ASCII? La respuesta a esto puede revelar lo que realmente debería convertirlo ... – Guffa

Respuesta

30

Una conversión directa de ANSI a ASCII no siempre es posible, ya que ANSI es un superconjunto de ASCII.

Usted puede tratar de convertir a UTF8 usando Encoding, sin embargo:

Encoding ANSI = Encoding.GetEncoding(1252); 

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

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

Por supuesto que puede sustituir a UTF8 con ASCII, pero eso no tiene mucho sentido desde:

  • si la cadena original no contiene ningún byte> 126, entonces ya es ASCII
  • si la cadena original contiene uno o más bytes> 126, entonces esos bytes se perderán

ACTUALIZACIÓN:

En respuesta a la pregunta actualizada, puede utilizar BinaryReader así:

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

Básicamente, es necesario que especifique una Encoding al leer/escribir el archivo. Por ejemplo:

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

Tenga en cuenta que una vez que lo haya leído, text es en realidad Unicode cuando en la memoria.

Puede elegir diferentes páginas de códigos usando Encoding.GetEncoding.

+0

Buena respuesta, particularmente para señalar que puede usar los métodos de archivos estáticos y no es necesario que implique directamente FileStreams o buffers. – Noldorin

Cuestiones relacionadas