En mi sistema de archivos (Windows 7) tengo algunos archivos de texto (estos son archivos de script SQL, si eso es importante).
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".
¿Cual es la diferencia aquí? Todos parecen ser guiones perfectamente válidos. ¿Cómo podría saber qué codificaciones tiene el archivo sin Notepad ++?

encaychardetpara sistemas POSIX.iconven particular es útil para este propósito. Esencialmente, itera las cadenas de caracteres / texto corruptos a través de diferentes codificaciones para ver cuál funciona. Ganas cuando los personajes ya no están corrompidos. Me encantaría responder aquí, con un ejemplo programático. Pero desafortunadamente es una pregunta protegida.chardetochardetectno está disponible en su sistema, puede instalar el paquete a través de su administrador de paquetes (por ejemploapt search chardet, en ubuntu / debian, generalmente se llamapython-chardetopython3-chardet) o mediante pip withpip install chardet(opip install cchardetpara la versión c-optimizada más rápida).Respuestas:
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é codificación está utilizando realmente un archivo .
Por ejemplo, un archivo con los primeros tres bytes
0xEF,0xBB,0xBFes probablemente un archivo codificado 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á usando un archivo, y la mayoría de las veces lo hace bien. Sin embargo, a veces se equivoca, es por eso que el menú 'Codificación' está allí, por lo que puede anular su mejor suposición.
Para las dos codificaciones que mencionas:
0xFF,0xFElos primeros 2 bytes. Por lo que puedo decir, Notepad ++ los describe como "UCS-2" ya que no admite ciertas facetas de UTF-16.fuente
No se puede. Si pudiera hacer eso, no habría tantos sitios web o archivos de texto con "galimatías aleatorias". Es por eso que la codificación generalmente se envía junto con la carga útil como metadatos.
En caso de que no sea así, todo lo que puede hacer es una "suposición inteligente", pero el resultado es a menudo ambiguo ya que la misma secuencia de bytes puede ser válida en varias codificaciones.
fuente