Quem trabalha com frequencia com a linguagem de programação php e recebe ou encontra códigos fonte implementados por outros usuários, geralmente enfrenta um problema: a codificação dos caracteres.
Tendo este tipo de problema, criei 4 snippets simples para mudança de codificação dos arquivos em massa.
Os comandos unix básicos utilizados são o file
e o comando iconv
respectivamente com os seguintes argumentos file -i filename
(que mostra algumas informações como o tipo de codificação do arquivo) e o comando iconv infile -f iso-8859-1 -t utf8 -o outfile
.
Por que 4? Bom, pensando em uma lógica melhor, alguém pode criar um apenas e que faça todas as análises necessárias antes da ação, mas vamos lá:
- Caso 01 – Em termos de codificação de caracteres [google](http://google.com) `charset` todos os arquivos são homogêneos, ou seja possuem a mesma codificação `charset=iso-8859-1` e deseja-se convertê-la para `charset=utf-8`:
for i in $(find -name \*.php); do iconv $i -f iso-8859-1 -t utf-8 -o $i; done
- Caso 02 – Em termos de codificação de caracteres`charset` todos os arquivos são homogêneos, ou seja possuem a mesma codificação `charset=us-ascii` e deseja-se convertê-la codificação para `charset=utf-8` :
for i in $(find -name \*.php); do iconv $i -f us-ascii -t utf-8 -o $i; done
- Caso 03 – Em termos de codificação de caracteres`charset` os arquivos **não são** homogêneos, ou seja uns possuem a mesma codificação `charset=iso-8859-1` e outros não e deseja-se converter a codificação para `charset=utf-8` :
for i in $(ls) do file -i $i | grep 'iso-8859-1' >> /dev/null if [ $? -eq 0 ] then iconv $i -f iso-8859-1 -t utf8 -o $i; fi done
- Caso 04 – Em termos de codificação de caracteres`charset` os arquivos não são homogêneos, ou seja uns possuem a mesma codificação `charset=us-ascii` e outros não e deseja-se converter a codificação para `charset=utf-8` :
for i in $(ls) do file -i $i | grep 'us-ascii' >>/dev/null if [ $? -eq 0 ] then iconv $i -f us-ascii -t utf8 -o $i fi done
Bueno, é isso hoje.
Ps: Caso alguém queira fazer um script mais genérico e com opções de argumentos como entrada, será bem vindo.
Deixe um comentário