2012-05-08 25 views
5

Tengo el programa C# que utilizamos para reemplazar algunos valores por otros, para usarlos después como parámetros. Como 'NAME1' reemplazado por & 1, 'NAME2' con & 2, y así sucesivamente.Lea el archivo codificado UNIX con C#

El problema es que los datos para modificar están en un archivo de texto codificado en UNIX, y los caracteres especiales como í, que incluso en la memoria, se leen como un cuadrado (carácter no válido). Debido a las especificaciones que están fuera de mi control, el archivo no se puede cambiar y no tiene otra opción que leerlo de esa manera.

He probado a lo leído con la mayor parte de los 130 codificaciones C# Me ofrece con:

EncodingInfo[] info = System.Text.Encoding.GetEncodings(); 
string text; 
for (int a = 0; a < info.Length; ++a) 
{ 
     text = File.ReadAllText(fn, info[a].GetEncoding()); 
     File.WriteAllText(fn + a, text, info[a].GetEncoding()); 
} 

fn es la ruta del archivo a leer. He revisado todos los archivos realizados (como 130), ninguno de ellos escribe correctamente, así que estoy fuera de las ideas y no puedo encontrar nada en Internet.

SOLUCIÓN:

Parece que finalmente el código hizo el trabajo para obtener el texto correctamente, también, tenía que arreglar el mismo codificador para la parte de escritura:

System.Text.Encoding encoding = System.Text.Encoding.GetEncodings()[41].GetEncoding(); 

String text = File.ReadAllText(fn, encoding); // get file text 

// DO ALL THE STUFF I HAD TO 

File.WriteAllText(fn, text, encoding) System.Text.Encoding.GetEncodings()[115].GetEncoding(); //Latin 9 (ISO) 

/* ALL THIS ENCODINGS WORKED APARENTLY FOR ME WITH ALL WEIRD CHARS I WAS ABLE TO WRITE :P 
    System.Text.Encoding.GetEncodings()[108].GetEncoding(); //Baltic (ISO) 
    System.Text.Encoding.GetEncodings()[107].GetEncoding(); //Latin 3 (ISO) 
    System.Text.Encoding.GetEncodings()[106].GetEncoding(); //Central European (ISO) 
    System.Text.Encoding.GetEncodings()[105].GetEncoding(); //Western European (ISO) 
    System.Text.Encoding.GetEncodings()[49].GetEncoding();  //Vietnamese (Windows) 
    System.Text.Encoding.GetEncodings()[45].GetEncoding();  //Turkish (Windows) 
    System.Text.Encoding.GetEncodings()[41].GetEncoding();  //Central European (Windows) <-- Used this one 
    */ 

Gracias mucho por su ayudar a

Noman (1)

+2

qué codificación del archivo escrito en? Sin saber eso, todo lo que tienes que hacer es adivinar. Que sea en una máquina UNIX es irrelevante. – Oded

+1

+1 para adivinar automáticamente !, pero ahora tiene que volver a su fuente para averiguar, como dice Oded, "¿qué codificación fue escrita por el archivo?". ¡Buena suerte! – shellter

+0

Lamento decir que no puedo conocer la fuente, lo único que sé es que en el bloc de notas está marcado en la parte inferior como UNIX ANSI, se creó a partir de un bate que sí copia [somefiles with *] myFile.txt. Supongo que la mayoría de ellos se creó a partir de la función "Guardar" de Oracle o de una secuencia de comandos de Excel –

Respuesta

2

usted tiene que conseguir el formato de codificación adecuada. intente

utilice el archivo -i. Esto generará información de tipo MIME para el archivo, , que también incluirá la codificación del juego de caracteres. He encontrado una man-page por ello, también :)

o tratar de enca

Se puede adivinar e incluso convertir entre codificaciones. Solo mira la página man.

Si tiene el formato de codificación adecuado, busque una forma de aplicarlo a la lectura de su archivo.

Cotizaciones: How to find encoding of a file in Unix via script(s)

+0

Encontré la solución, pero no puede publicarlo hasta que pasen 6 horas más =) –