descobrir se é utf-8

Posted on ter 19 outubro 2010 in HowTo

Um colega meu estava com a necessidade de descobrir, no Linux, qual a codificação (encoding)  de um arquivo.  Afinal, é uma droga quando o servidor está numa codificação e o arquivo em outra. Certamente você já se deparou com alguma página na Internet em que uma palavra, por exemplo:  "comunicação", se transforma em algo como "comunicaC&aÂ#%o" ou coisa parecida...

o pulo do  gato é esta linha, via shell

file $1 --mime-encoding | cut -d":" -f2 | sed -e 's/ //g'

aí dá até para montar um script, seja para testar ou mesmo evitar uma situação:

#!/bin/bash
tipo=$(file $1 --mime-encoding | cut -d":" -f2 | sed -e 's/ //g')

if [ $tipo != 'utf-8' ]; then
# echo "nao eh utf-8"
exit 1
else
# echo "eh utf-8"
exit 0
fi

porém arquivo sem caracteres como 'ç' ou 'á' , por exemplo um texto sem acentuação , sempre será identificado como 'us-ascii'.

Ah, em PHP existe a função mb_detect_encoding para realizar este teste com strings...
http://www.php.net/manual/en/function.mb-detect-encoding.php