Por que os editores de texto acham que este arquivo é UTF-8?

6

Eu tenho dois arquivos de texto, para os quais estou dando links de download em vez de um pastebin para preservar seu conteúdo com precisão:

Ambos os arquivos de texto consistem apenas em espaços, retornos de carro, novas linhas e a letra X, e devem ser codificados em ASCII. A única diferença entre esses dois arquivos é o segundo arquivo removido, e alguns espaços iniciais e finais em cada linha removidos.

O primeiro arquivo não está causando problemas. Por alguma razão, meus editores de texto estão detectando o arquivo segundo como UTF-8:

  • O bloco de notas, quando aberto clicando duas vezes no arquivo de texto, exibe o texto corrompido:

  • OBlocodenotas,aousarArquivo→Abrir,funcionabem,desdequeeuescolhaexplicitamente"ANSI":

  • ONotepad++,aoexibiroarquivobem,acreditaqueeleestácodificadocomo"UTF-8 (No BOM)":

  • NoNotepad++,mesmoseeuselecionar"convert to ANSI" e salvar o arquivo, o arquivo salvo é byte a byte idêntico ao original, e ambos os editores ainda o detectam como UTF-8!

  • Ambos os editores não têm problemas com o primeiro arquivo e reconhecem-no corretamente como ASCII (ou ANSI).

Eu olhei para o segundo arquivo de texto em um editor hexadecimal. Na verdade, isso não começa com uma lista técnica. Os primeiros bytes do arquivo são 20 20 20 20 20 20 20 20 , como deveriam, pois começa com espaços:

Minha pergunta é: Por que, então, o Notepad e o Notepad ++ detectam o segundo arquivo como UTF-8? Dado que o arquivo não tem cabeçalho de BOM, por que isso está acontecendo e o que é exclusivo sobre o segundo arquivo comparado ao primeiro arquivo que está causando isso? Não consigo descobrir o que está acontecendo.

    
por Jason C 31.03.2015 / 09:14

1 resposta

5

Ambos os arquivos são válidos ASCII e UTF-8, pois incluem apenas pontos de código < 0x7F (para colocar de forma diferente, nenhum byte tem valor maior que 127).

Meu palpite é que o Notepad ++ e o Notepad têm heurísticas diferentes [se várias codificações forem válidas]:

N ++ simplesmente prefere UTF-8,

O Notepad (utilitário Win) parece olhar o tamanho do arquivo - se for par (como seu segundo arquivo que é 72 320 bytes) do que tratá-lo como UTF-16 (codificação nativa do Windows que é principalmente 2 bytes [nem sempre, mas provavelmente foi transferido do UCS-2 anterior, que sempre foi de dois bytes]) e se for ímpar (como seu primeiro arquivo - 78 045 bytes) tratá-lo como ASCII (byte único).

Você pode testá-lo adicionando espaço único (ou qualquer outro caractere ascii válido) ao final do seu primeiro arquivo para aumentar o comprimento - se você abrir no bloco de notas, ele assumirá que é Unicode e exibirá 'lixo'

btw: ambos os arquivos são reconhecidos como utf-8 no Notepad ++ no meu PC

    
por 31.03.2015 / 12:28