como saber en que codificacion esta un archivo txt?
-
Monday, May 09, 2011 9:20 AMHola a tyodos, mi cuestioin es la siguiente, se supone que tengo que abrir cualquier tipo de archivo txt, pero, en caso de que se trate de codificacion ANSI o UniCode o quelauqier codificacion que no sea UTF-8 debo pasarlo a UTF-8 antes de abrirlo. Alguna sugerencia de como puedo identificar a priori en que codificacion esta escrito? y alguna sugerencia para la transformacion a UTF-8?
All Replies
-
Monday, May 09, 2011 11:43 AMModerator
hola
para conocer el encodign no has probado con
StreamReader sr = new StreamReader("filename.txt", true);
Encoding enc = fs.CurrentEncoding();con esto conocerias si es el encodigo que necesitas o no antes de abrirlosaludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Marked As Answer by Eduardo PorteschellerMicrosoft Community Contributor, Moderator Tuesday, May 17, 2011 7:20 PM
-
Monday, May 09, 2011 2:25 PMStreamReader sr = new StreamReader("filename.txt", true);
Encoding enc = fs.CurrentEncoding();con esto conocerias si es el encodigo que necesitas o no antes de abrirlo...Extraido de tu enlace:
The current character encoding used by the current reader. The value can be different after the first call to any Read method of StreamReader, since encoding autodetection is not done until the first call to a Read method.
O sea que no tendrás la codificación en la propiedad CurrentEncoding del objeto sr, hasta que no hagas una llamada al metodo Read.
Pero esto es solo teoría, como bien indica Walter Miguel, no todos los formatos son reconocidos:
It automatically recognizes UTF-8, little-endian Unicode, and big-endian Unicode text if the file starts with the appropriate byte order marks.
http://msdn.microsoft.com/en-us/library/7bc2hwcb.aspx
- Proposed As Answer by Jovino Rodríguez Wednesday, May 11, 2011 11:23 AM
- Unproposed As Answer by Jovino Rodríguez Wednesday, May 11, 2011 11:28 AM
-
Wednesday, May 11, 2011 9:44 AM
Gracias a todos por vuestrea respuestas, seguí el consejo de Leandro, puse:
StreamReader sr = new StreamReader(texto,true); //File.OpenText(texto);
cadena = sr.ReadLine();
Encoding enc = sr.CurrentEncoding;y al leer el Encoding enc me da lo siguiente:
texto en ANSI -> UTF(Encoding, y claro esta, me lo representa mal(falta de letras acentuadas)
el resto:
texto en Unicode Big Endian -> UnicodeEncoding (lo representa bien)
texto en Unicode -> UnicodeEncoding (lo representa bien)
texto en UTF8 -> UTF8Encoding (lo representa bien)
Por lo tanto el unico problema es con ANSI, como podria reconocer entonces que se trata de ANSI y pasarlo a por ejemplo Unicode o UTF8?
-
Wednesday, May 11, 2011 11:28 AM
Si el único problema lo tienes con el ANSI, que es precisamente el que no se puede reconocer porque carece de los bytes identificativos, entonces puedes seguir el acercamiento que siguen aquí:
http://www.west-wind.com/weblog/posts/2007/Nov/28/Detecting-Text-Encoding-for-StreamReader
Precisamente lo que hace es suponer que se trata de ANSI a no ser que "algo" le diga lo contrario:
public static Encoding GetFileEncoding(string srcFile) { // *** Use Default of Encoding.Default (Ansi CodePage) Encoding enc = Encoding.Default; // *** Detect byte order mark if any - otherwise assume default byte[] buffer = new byte[5]; FileStream file = new FileStream(srcFile, FileMode.Open); file.Read(buffer, 0, 5); file.Close(); if (buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf) enc = Encoding.UTF8; else if (buffer[0] == 0xfe && buffer[1] == 0xff) enc = Encoding.Unicode; else if (buffer[0] == 0 && buffer[1] == 0 && buffer[2] == 0xfe && buffer[3] == 0xff) enc = Encoding.UTF32; else if (buffer[0] == 0x2b && buffer[1] == 0x2f && buffer[2] == 0x76) enc = Encoding.UTF7; return enc; }- Proposed As Answer by Jovino Rodríguez Wednesday, May 11, 2011 11:28 AM
- Marked As Answer by Eduardo PorteschellerMicrosoft Community Contributor, Moderator Tuesday, May 17, 2011 7:20 PM

