Me preguntaba si algunos archivos de texto almacenan su método de codificación junto con su contenido de texto para su posterior decodificación.
La respuesta de Mark Szymanski es correcta: no hay información de codificación explícita en un archivo de texto sin formato, esa es la definición de "archivo de texto sin formato", el "texto sin formato" se refiere al hecho de que no hay metadatos en el archivo.
Sin embargo, algunas aplicaciones colocarán una marca de orden de bytes (BOM) en archivos de texto codificados como UTF-16 o UTF-32 / UCS-4. La lista de materiales no está destinada a indicar la codificación (indica el orden de los bytes, como su nombre lo indica), pero muchas aplicaciones utilizarán la presencia de la lista de materiales para reconocer UTF-16 / UTF-32, por lo que sirve como un indicador de codificación.
¿O es el trabajo del espectador de texto adivinar el método de codificación para un archivo de texto dado, y la suposición no siempre es correcta? En caso afirmativo, ¿cómo adivina eso un visor de texto?
Sí, el visor de texto solo puede adivinar. Suele utilizar algunas heurísticas:
- En algunas codificaciones (especialmente en UTF-8) no todas las secuencias de bytes son válidas. Entonces, una aplicación puede intentar decodificar el archivo como UTF-8. Si tiene éxito, el archivo es probablemente UTF-8; si falla al encontrar una secuencia de bytes no válida, no lo es. Así es como, por ejemplo,
vim
funciona de manera predeterminada: primero intentará usar UTF-8 al leer un archivo; Si eso falla, vuelve a ISO-8859-1.
- En la mayoría de las codificaciones de 8 bits anteriores, cualquier secuencia de bytes es válida. En ese caso, a veces puede adivinar la codificación mirando el histograma de bytes (frecuencia de diferentes bytes / secuencias de bytes). Internet Explorer solía hacer esto para "adivinar" la codificación de una página. Sin embargo, esto es muy propenso a errores, por lo que pocos programas hacen esto.
En la mayoría de los casos, se le debe decir explícitamente a un programa cuál es la codificación de un archivo de texto; de lo contrario, no podrá leerlo correctamente.