Pregunta

Estoy utilizando la clase StreamReader en .NET como esto:

using( StreamReader reader = new StreamReader( "c:\somefile.html", true ) {
    string filetext = reader.ReadToEnd();
}

Esto funciona bien cuando el archivo tiene una lista de materiales. Me encontré con problemas con un archivo sin BOM .. básicamente me dieron un galimatías. Cuando he especificado Encoding.Unicode funcionó bien, por ejemplo:

using( StreamReader reader = new StreamReader( "c:\somefile.html", Encoding.Unicode, false ) {
    string filetext = reader.ReadToEnd();
}

Por lo tanto, tengo que conseguir el contenido del archivo en una cadena. Entonces, ¿cómo la gente suele manejar esto? Yo sé que no hay solución que funcione el 100% del tiempo, pero me gustaría mejorar mis probabilidades .. es evidente que existe software por ahí que trata de adivinar (por ejemplo, el Bloc de notas, navegadores, etc). ¿Hay un método en el marco .NET que adivinar para mí? ¿Alguien tiene algún código que les gustaría compartir?

Más de fondo: Este pregunta es más o menos la misma que la mía, pero estoy en la tierra .NET. Esa pregunta me llevó a un blog para ver los distintos codificación de detección bibliotecas , pero ninguno de ellos es en .NET

Otros consejos

Debe leer este artículo de Raymond Chen. Él entra en detalles sobre cómo los programas pueden adivinar lo que es una codificación (y parte de la diversión que viene de adivinar)

http://blogs.msdn.com/oldnewthing /archive/2004/03/24/95235.aspx

he tenido buena suerte con Pude , un puerto C# de Mozilla Universal Charset Detector.

UTF-8 está diseñado de una manera que es poco probable que tenga un texto codificado en un 8bit-codificación arbitraria como latin1 siendo decodificada a Unicode apropiada usando UTF-8.

Así que el enfoque mínimo es esto (pseudocódigo, no me refiero .NET):

intento:    u = some_text.decode ( "UTF-8") excepto UnicodeDecodeError:    u = some_text.decode ( "más-probable-codificación")

En el más-probable que codifica por lo general utiliza por ejemplo latin1 o CP1252 o lo que sea. enfoques más sofisticados podrían tratar y encontrar parejas de caracteres específicos del idioma, pero no estoy al tanto de algo que hace que, como una biblioteca o algo así.

He utilizado este para hacer algo similar hace un tiempo:

http://www.conceptdevelopment.net/Localization/NCharDet/

El uso de Win32 IsTextUnicode.

En el sentido más general, es un promlem difícil. Ver: http://blogs.msdn.com/oldnewthing/ archivo / 2007/04/17 / 2158334.aspx .

Una técnica hacky podría ser tomar una MD5 del texto, entonces descodificar el texto y re-codificar en varias codificaciones, MD5'ing cada uno. Si uno coincide con que supongo que es el que codifica.

Eso es, obviamente, demasiado lenta para algo que maneja una gran cantidad de archivos sino a algo así como un editor de texto que pude ver su funcionamiento.

Aparte de eso, va a ser las manos sucias portar las bibliotecas Java a partir de este post que vino de la cuestión Delphi SO, o utilizando la función de IE MLang.

Véase mi respuesta (reciente) a este (por lo que yo puedo decir, equivalente) pregunta: ¿Cómo puedo detectar la codificación / página de códigos de un archivo de texto

No trata de adivinar a través de una gama de posibles codificaciones "nacionales" como MLang y NCharDet hacer, sino más bien se supone que sabe qué tipo de archivos no son Unicode que es probable encontrar. Por lo que yo puedo decir por su pregunta, debe dirigir su problema bastante fiable (sin depender de la "recuadro negro" de MLang).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top