¿Los archivos de texto almacenan su método de codificación para su posterior decodificación?

19
  1. 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.
  2. ¿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?
Tim
fuente
Si se trata de un archivo de texto sin formato, no almacena nada sobre la codificación. Sin embargo, no puedo decir para texto enriquecido.
Wuffers
Sí, estoy hablando de texto sin formato.
Tim

Respuestas:

19

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, vimfunciona 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.

sleske
fuente
Entonces, ¿cómo file -bifunciona si no se utiliza BOM?
Old Geezer
@OldGeezer: filetiene varias heurísticas para determinar el tipo de archivo y la codificación. Principalmente, busca ciertas cadenas o secuencias de bytes en el archivo. Si desea información más específica, probablemente tendrá que leer la fuente. O simplemente haga una pregunta por separado :-).
sleske
@OldGeezer: Y por cierto, fileno puede detectar de manera confiable la mayoría de las codificaciones de texto (porque eso es muy difícil). La página de manual tiene información sobre la detección de filejuegos de caracteres: en su mayoría solo reconoce ASCII, UTF-8/16, EBCDIC e ISO-8859-x. Por ejemplo, un archivo codificado en KOI8-R se informa como "ISO-8859-1".
sleske
4

Los archivos de texto sin formato no almacenan ninguna información sobre su codificación. Un visor lo determina en función de la codificación de caracteres que haya establecido para él. No puede determinarlo por sí mismo, ya que es lo mismo para la computadora.

Wuffers
fuente
Por lo tanto, los lectores de texto no pueden distinguir entre los métodos de codificación para archivos de texto. Si un visor de texto recibe un objeto / archivo ejecutable, ¿podrá decir que no es un archivo de texto?
Tim
No, no puede. Intentará abrirlo como un archivo de texto. Y, por supuesto, mostrará un montón de cosas ilegibles. La única forma en que puede distinguir entre codificaciones es si cambia manualmente la codificación.
Wuffers
@Tim: la mayoría de los visores de texto utilizan una heurística para verificar si algo es un archivo de texto. Si el archivo tiene muchos caracteres no imprimibles, muchos visores y editores lo advertirán (por ejemplo, lessy grepen Unix / Linux haga esto).
sleske