Você não pode dizer a codificação de um arquivo. Você só pode fazer um palpite inteligente. Você pode adivinhar o que é certo, mas às vezes as suposições falham. fileé um exemplo de um programa que faz suposições inteligentes.
Marco
11
@Marco: É possível verificar se é UTF-8 válido ou não, no entanto. Existem algumas codificações que podem passar por UTF-8 válidas por engano, mas isso quase nunca acontece com codificações / caracteres de ISO-8859-𝒏 ou Windows-125..
user1686
Respostas:
28
Você pode determinar a codificação do arquivo com o seguinte comando:
@nicolas Para o MacOS, você pode tentar file -I filename(-I é uma capital i).
Rik
5
Isso lê o arquivo inteiro?
Ctrl-alt-delor 30/0318
2
@ kojow7 utf-8 não tem cabeçalho. O ASCII puro (somente 7 bits) é indistinguível do utf-8 (esse é o ponto, um cabeçalho causará todo tipo de problema). Portanto, se você tiver um arquivo ASCII para o primeiro MB e tiver um único caractere UTF-8, não saberá, a menos que leia o arquivo inteiro.
ctrl-alt-Delor
3
Isso não deve ser aceito como resposta. O comando 'arquivo' não faz isso; ele lê apenas parte do arquivo e usa números mágicos para adivinhar. Ocasionalmente, o 'arquivo' pode e dará a resposta incorreta. Para verificar se um arquivo passa uma codificação como ascii, iso-8859-1, utf-8 ou o que for, então uma boa solução é usar o comando 'iconv'.
@davidpostill Estou curioso, é uma má prática citar o autor na referência?
Pablo Olmos de Aguilera C.
Não. No entanto, é uma boa prática fazer o link dizer para onde ele me leva. Suponha que eu esteja lendo apenas o texto azul. Após a edição, posso dizer por que e quando devo clicar nela. Antes, eu não podia. (Não fui eu quem fez a edição, mas tenho quase 94% de certeza de que é disso que se tratava.) #
305 Hermann Döppes
Agradável e funciona bem find -type f -exec isutf8 {} +, porque também cita o nome do arquivo. (E com o uso find ... -exec ... +também é rápido)
Tomasz Gandor
2
Não use o filecomando Ele não inspeciona o arquivo inteiro e basicamente adivinha. Às vezes, fornece respostas incorretas.
Você pode verificar se um arquivo passa a codificação UTF-8 assim:
$ iconv -f utf8 <filename> -t utf8 -o /dev/null
Um código de retorno zero significa que ele passa UTF8. Um código de retorno diferente de zero significa que não é UTF8 válido.
Não é possível saber se um arquivo foi necessariamente exportado usando um esquema de codificação específico, pois alguns esquemas de codificação se sobrepõem. Para fazer isso, é necessário que os metadados sejam incorporados ao arquivo, e mesmo assim você confiaria em quem gerou esse arquivo, em vez de validá-lo por conta própria ... e você sempre deve validá-lo.
file
é um exemplo de um programa que faz suposições inteligentes.Respostas:
Você pode determinar a codificação do arquivo com o seguinte comando:
fonte
file -I filename
(-I é uma capital i).Existe, use o
isutf8
comando do pacote moreutils .Fonte: Como você pode saber se um arquivo está codificado em UTF-8 ou não?
fonte
find -type f -exec isutf8 {} +
, porque também cita o nome do arquivo. (E com o usofind ... -exec ... +
também é rápido)Não use o
file
comando Ele não inspeciona o arquivo inteiro e basicamente adivinha. Às vezes, fornece respostas incorretas.Você pode verificar se um arquivo passa a codificação UTF-8 assim:
Um código de retorno zero significa que ele passa UTF8. Um código de retorno diferente de zero significa que não é UTF8 válido.
Não é possível saber se um arquivo foi necessariamente exportado usando um esquema de codificação específico, pois alguns esquemas de codificação se sobrepõem. Para fazer isso, é necessário que os metadados sejam incorporados ao arquivo, e mesmo assim você confiaria em quem gerou esse arquivo, em vez de validá-lo por conta própria ... e você sempre deve validá-lo.
fonte
Ainda outra maneira é usar
recode
, que sairá com um erro se tentar decodificar UTF-8 e encontrar caracteres inválidos.fonte