¿Cómo detectar la codificación de un archivo?

102

En mi sistema de archivos (Windows 7) tengo algunos archivos de texto (estos son archivos de script SQL, si eso importa).

Cuando se abre con Notepad ++ , en el menú "Codificación" se informa que algunos de ellos tienen una codificación de "UCS- 2 Little Endian "y algunos de" UTF-8 sin BOM ".

¿Cuál es la diferencia aquí? Todos parecen ser scripts perfectamente válidos. ¿Cómo podría saber qué codificaciones tiene el archivo sin Notepad ++?

    
pregunta Marcel 15.02.2013 - 10:45
fuente

2 respuestas

87

Los archivos generalmente indican su codificación con un encabezado de archivo. Hay muchos ejemplos aquí . Sin embargo, incluso leyendo el encabezado nunca puede estar seguro de qué es lo que realmente utiliza la codificación de un archivo .

Por ejemplo, un archivo con los tres primeros bytes 0xEF,0xBB,0xBF es probablemente un archivo codificado en UTF-8. Sin embargo, podría ser un archivo ISO-8859-1 que comienza con los caracteres  . O podría ser un tipo de archivo completamente diferente.

Notepad ++ hace todo lo posible para adivinar qué codificación está utilizando un archivo, y la mayoría de las veces lo hace correctamente. Aunque a veces se equivoca, es por eso que el menú 'Codificación' está ahí, por lo que puede anular su mejor estimación.

Para las dos codificaciones que mencionas:

  • Los archivos "UCS-2 Little Endian" son archivos UTF-16 (según lo que entiendo de la información aquí ) así que probablemente comience con 0xFF,0xFE como los primeros 2 bytes. Por lo que puedo decir, Notepad ++ los describe como "UCS-2" ya que no admite ciertas facetas de UTF-16.
  • Los archivos "UTF-8 sin BOM" no tienen bytes de encabezado. Eso es lo que significa el bit "sin BOM".
respondido por el vaughandroid 15.02.2013 - 11:16
fuente
15

No puedes. Si pudiera hacer eso, no habría tantos sitios web o archivos de texto con "alboroto al azar" por ahí. Es por eso que la codificación generalmente se envía junto con la carga útil como metadatos.

En caso de que no lo sea, todo lo que puede hacer es una "conjetura inteligente" pero el resultado suele ser ambiguo, ya que la misma secuencia de bytes podría ser válida en varias codificaciones.

    
respondido por el Marco 15.02.2013 - 11:16
fuente

Lea otras preguntas en las etiquetas