miércoles, noviembre 08, 2006

Leer un fichero de texto en C# .NET reconociendo tildes (acentos) y otros signos especiales - To read a text file in C# .NET and recognize special characters and signs

Esto consiste en un proceso muy sencillo pero se nos puede complicar si somos algo novatos o venimos de Java y estamos acostumbrados a lo fácil.

Para empezar, C# .NET posee un mecanismo de lectura de ficheros de texto muy eficiente, siendo éste el siguiente:
// Método para procesar un fichero
public void procesarFichero()
{
// Definimos un StreamReader
StreamReader lector;
string linea = "";

try{
lector = File.OpenText(fichero);

// Lee linea a linea
while ( (linea = lector.ReadLine()) != null){
//hacemos lo que queramos
}
// Cerramos la conexion
lector.Close();
}
catch (Exception e){
System.Console.WriteLine("Problemas al cargar el fichero.{0}", e);
}
}

El problema viene si al llevar a cabo el proceso de lectura, podemos observar que los string resultado no incorporan caracteres especiales como por ejemplo las tildes y acentos de otro tipo.
La causa de este problema es que el descriptor que hemos utilizado anteriormente sólo reconoce ficheros con codificación UTF-8 (por defecto), por lo que la entrada debe estar codificada de este modo. ¿entonces, cómo podemos convertir nuestro fichero de texto de toda la vida a UTF-8?
Pues muy sencillo: tomamos un editor básico de texto (bloc de notas de windows o similares), abrimos nuestro fichero, seleccionamos la opción de guardar como... y en el campo referente a codificación seleccionaremos UTF-8.

//claves: procesar fichero texto c# .net utf-8 reconocer tildes read text file

5 comentarios:

DriEg0n dijo...

¿Por qué complicar al usuario pidiendole hacer cosas tan "complicadas"? Mientras más amigable sea tu programa con el usuario, mejor será ¿No crees?

Yo encontré este código, creo que es más funcional:

StreamReader Lector = new StreamReader(DireccionDeArchivo, Encoding.Default);

Solo se agrega el Encoding.Default como parámetro del StreamReader y ya!

Saludos!

pedromateo dijo...

Ok, gracias por el comentario.
Tu código obviamente es más sencillo que estar con toda la parafernalia, pero lo único que hace es abrir un lector y reducir una cosa que yo hago en dos pasos a uno.
Realmente lo que pretendía hacer con este código es incluir cómo se puede leer línea a línea, recalcar que debe cerrarse SIEMPRE el descriptor de fichero cuando se termina una lectura y también mostrar el uso y manejo de los errores mediante excepciones.
De todas formas, tu comentario aporta un complemento que no viene nada mal a este código, ya que consigues estar tirando de editores externos y lo haces directamente.

Gracias y espero que encuentres cosas útiles aquí, aunque en los últimos dos años no haya podido actualizar mucho.

Saludos

Anónimo dijo...

Deseo modificar contenido de una linea en c#, como se hace?

Pahola spitia dijo...

hola intento ponerle tilde a todas las palabras que terminen en "ion" en un text box. si alguien sabe algo por favor comentar

Pahola spitia dijo...

hola intento ponerle tilde a todas las palabras terminadas el "ion", en un text box. los que sepan por favor dejen su comentario