Os arquivos de texto armazenam seu método de codificação para decodificação posterior?


19
  1. 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?
  2. 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?

Se é um arquivo de texto sem formatação, não armazena nada sobre a codificação. Não posso dizer para rich text, no entanto.
Wuffers

Sim, estou falando de texto simples.
Tim

Respostas:


19

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


Então, como file -bifunciona se a lista técnica não é usada?
Geezer idoso

@ OldGeezer: filepossui várias heurísticas para determinar o tipo e a codificação do arquivo. Principalmente, ele procura determinadas seqüências de caracteres ou bytes no arquivo. Se você quiser informações mais específicas, provavelmente precisará ler a fonte. Ou apenas faça uma pergunta separada :-).
Sleske

@ OldGeezer: E, BTW, filenão é possível detectar com segurança a maioria das codificações de texto (porque isso é muito difícil). A página do manual possui algumas informações sobre a detecção do conjunto de caracteres - na filemaioria das vezes, reconhece apenas ASCII, UTF-8/16, EBCDIC e ISO-8859-x. Por exemplo, um arquivo codificado no KOI8-R é relatado como "ISO-8859-1".
Sleske

4

Arquivos de texto sem formatação não armazenam nenhuma informação sobre sua codificação. Um visualizador determina isso com base na codificação de caracteres que você definiu para ele. Ele não pode determiná-lo por si só, pois é o mesmo para o computador.


Portanto, os visualizadores de texto não podem distinguir entre métodos de codificação para arquivos de texto. Se um visualizador de texto receber um arquivo objeto / executável, ele poderá dizer que não é um arquivo de texto?
Tim

Não, não pode. Ele tentará abri-lo como um arquivo de texto. E, claro, exibirá um monte de coisas ilegíveis. A única maneira de conseguir distinguir entre codificações é se você alterar manualmente a codificação.
Wuffers

@ Tim: A maioria dos visualizadores de texto usa uma heurística para verificar se algo é um arquivo de texto. Se o arquivo tem muitos caracteres não-imprimíveis, muitos espectadores e editores irá avisá (por exemplo, lesse grepem Unix / Linux fazer isso).
Sleske #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.