Eu queria saber se alguns arquivos de texto armazenam seu método de codificação ao longo de seu conteúdo de texto para decodificação posterior?
A resposta de Mark Szymanski está correta - não há informações de codificação explícitas em um arquivo de texto sem formatação - essa é a definição de "arquivo de texto sem formatação"; a palavra "sem formatação" refere-se ao fato de que não há metadados no arquivo.
No entanto, alguns aplicativos colocam uma marca de ordem de byte (BOM) em arquivos de texto codificados como UTF-16 ou UTF-32 / UCS-4. A BOM não pretende realmente indicar a codificação (indica a ordem dos bytes, como o nome indica), mas muitos aplicativos usarão a presença da BOM para reconhecer UTF-16 / UTF-32, portanto, serve como um indicador de codificação.
Ou é tarefa do visualizador de texto adivinhar o método de codificação para um determinado arquivo de texto, e a suposição nem sempre pode estar correta? Se sim, como um visualizador de texto adivinha isso?
Sim, o visualizador de texto pode apenas adivinhar. Geralmente usa algumas heurísticas:
- Em algumas codificações (principalmente em UTF-8), nem todas as seqüências de bytes são válidas. Portanto, um aplicativo pode apenas tentar decodificar o arquivo como UTF-8. Se for bem-sucedido, o arquivo provavelmente é UTF-8; se falhar ao encontrar uma sequência de bytes inválida, não será. É assim que, por exemplo,
vim
funciona por padrão: Ele primeiro tentará usar UTF-8 ao ler um arquivo; se isso falhar, ele volta ao padrão ISO-8859-1.
- Na maioria das codificações mais antigas de 8 bits, qualquer sequência de bytes é válida. Nesse caso, você pode adivinhar a codificação observando o histograma de bytes (frequência de diferentes sequências de bytes / bytes). O Internet Explorer costumava fazer isso para "adivinhar" a codificação de uma página. No entanto, isso é muito propenso a erros, portanto, poucos programas fazem isso.
Na maioria dos casos, um programa deve ser informado explicitamente sobre qual é a codificação de um arquivo de texto, caso contrário, não será capaz de lê-lo corretamente.