2012-01-26 13 views
5

Soy bastante nuevo en archivos, transmisiones y páginas de códigos diferentes. Vea este es mi problema:C#: cómo: para saber si tengo la codificación correcta

Obtengo archivos de texto y algunos de ellos han sido creados con la página de códigos Windows-1252, algunos aún son IBM850 y otras son UTF8. Cuando los importo, mi base de datos muestra todo tipo de símbolos para ä, ö, ü, ß, porque los leí con la página de códigos incorrecta. solo cuando los importo con la página de códigos correcta, todo funciona bien.

Esto es lo que pensé que sería posible que un buen enfoque:

Convertir ä, ö, ü, ß a bytes matriz con una página de códigos X

por ejemplo:

byte[] myAeKl = Encoding.GetEncoding("IBM850").GetBytes("ä"); 

byte[] myAeGr = Encoding.GetEncoding("IBM850").GetBytes("Ä"); 

pasan por los archivos de texto y comparar cada conjunto de bytes de letras con los de arriba. si encuentra esta página de códigos, de lo contrario pruebe con otra página de códigos.

Esto es lo que no entiendo: ¿Cómo puedo comparar los bytes de las letras en el archivo de texto a las matrices de bytes de las letras que estoy buscando. Ej:

if (Textfile.Letter == myAeKl || Textfile.Letter == myAeGr) 
... 

¿Hay alguna otra manera de conseguir la página de código correcto? ¿Tengo el enfoque adecuado para la solución?

Respuesta

0

Intentaré cargar el archivo con una codificación y si encuentro caracteres inesperados, cárguelo con el otro.

+0

Hola, Gracias por su rápida respuesta. Bueno, el problema es que los archivos pueden ser grandes y la importación lleva cierto tiempo y el mayor problema es que no realizo la importación. Acabo de programarlo :) Greetz – Phenix

+0

"si me encuentro" se entiende por programación. –

3

Desafortunadamente, no existe un método infalible, ya que una determinada secuencia de bytes puede tener sentido en más de una codificación.

Una forma de hacerlo es utilizar conjeturas y heurística utilizando otros datos comerciales. ¿Puedes inferir la codificación del nombre del archivo? ¿De algunos otros metadatos, como el nombre del remitente? Si es así, intenta filtrar usando eso.

Si no, puede intentar excavar y adivinar. Si los archivos pueden ser grandes, como dices, solo echa un vistazo y trae una muestra de texto (por ejemplo, los primeros 512 bytes, eso debería ser suficiente). ¿Tienes alguna forma de adivinar cuál puede ser el contenido? ¿Es texto libre en inglés/hebreo o algo así? Si es así, busca palabras comunes en la muestra de 512 bytes. ¿Los archivos contienen un formato fijo? Si es así, búscalo. Luego ejecute estas pruebas en muestras en vivo, vea los resultados, modifique las pruebas y vuelva a intentarlo hasta que tenga una oportunidad relativamente buena de reconocer la codificación.

¡Buena suerte!

+0

Hola, ¡Muchas gracias por todos sus consejos! Ahora no tengo ese tipo de información. Todos los textos en los archivos están en alemán, las primeras posiciones pueden ser una letra y en otros archivos números. Es por eso que pensé que mi mejor opción era/es obtener todo en bytes y encuentro esos ä, ö, ß en algún lugar en el texto Gracias de nuevo, Espero poder encontrar algún tipo de patrón para que coincida . – Phenix

Cuestiones relacionadas