Alterar a codificação de um arquivo

Codificação, encoding ou charset é aquele conjunto de códigos de página que só serve para atrapalhar a vida de administradores de sistemas não inglês.

O administrador que nunca abriu um arquivo no Linux e viu a acentuação toda errada por conta disso que atire a primeira pedra. O que já viu e não soube como resolver recomendo ler todo o texto 😉

Existem centenas de codificação tal como:

  • UTF-8
  • ISO8859-1
  • WINDOWS-1252
  • etc.

E o resultado disso é que se o arquivo foi escrito em um editor com codificação ISO8859-1 (o que é bastante comum em distribuições Linux com mais de um ano) e por exemplo agora você precisa ler este arquivo em uma aplicação com codificação UTF-8 (comum nas distribuições com menos de um ano) você verá todos os caracteres acentuados de forma incorreta.

Você não precisa se desesperar por isso. Basta converter o arquivo com o utilitário iconv que está disponível no pacote libc6 (que já está instalado por padrão na maioria das distribuições Linux).

Descobrindo a codificação

Neste meu exemplo eu tenho um arquivo chamado brazilian_portuguese.txt e cuja codificação é a ISO8859-1. E como eu sei que a codificação é essa? Simples!

Use o comando file assim:

$ file -i brazilian_portuguese.txt
brazilian_portuguese.txt-iso8859-1: text/plain; charset=iso-8859-1

Note a seção charset no fim da linha.

Convertendo de uma codificação para outra

Au precisei converter este arquivo para codificação utf-8. Para tal façanha eu usei o seguinte comando:

$ cat brazilian_portuguese.txt|iconv -f iso8859-1 -t UTF-8 -o brazilian_portuguese.txt_utf-8

Somente isso. Obviamente eu depois precisei substituir um arquivo por outro no meu sistema para que tudo funcionasse na boa, mas no básico é isso.

Eu usei este comando para alterar a codificação do arquivo de idiomas do OCS Inventory-ng, um software para inventário de computadores, mas isso poderia ser usado em qualquer arquivo, tal como um dump de base de dados, páginas html etc. (desde que vc já saiba qual é a codificação atual).

Só a título de curiosidade, se você precisar ver a lista de codificações que o iconv suporta basta usar o comando “iconv -l”.

14 comentários em “Alterar a codificação de um arquivo”

  1. Sou desenvolvedor PHP na empresa e estou com o seguinte problema e gostaria de saber se você pode me ajudar em algo:

    Problema:

    Tenho um formulário em PHP que quando gravo as informações no banco de dados SQL Server 2000 os caractere especiais como (ç, acento agudo/cincunflexo) são gravados no banco como caracteres estranhos. Visualizo essa falha através do Profiler do SQL.

    Ambiente 1 com problema (ambiente de teste):

    – Páginas PHP usando codificação Charset (@header(“Content-Type: text/html; charset=iso-8859-1”,true);)

    – Servidor Web Apache

    – Banco de dados SQL Server 2000 (Collation SQL_Latin1_General_CP1_CI_AI)

    – SO Win XP

    Ambiente 2 com problema (ambiente de teste):

    – Páginas PHP usando codificação Charset (@header(“Content-Type: text/html; charset=iso-8859-1”,true);)

    – Servidor Web IIS

    – Banco de dados SQL Server 2000 (Collation SQL_Latin1_General_CP850)

    – SO Win 2003 Server

    OBS: tenho o mesmo sistema/formulário rodando no ambiente de produção e gravando normalmente!

    Ambiente funcionando (ambiente produção)

    – Páginas PHP usando codificação Charset (@header(“Content-Type: text/html; charset=iso-8859-1”,true);)

    – Servidor Web IIS

    – Banco de dados SQL Server 2000 (Collation SQL_Latin1_General_CP1_CI_AI)

    – SO Win 2003 Server

    Att.

  2. Olá @Marcello Fumero ,

    Pra ser honesto eu não sei nem que gosto tem um Microsoft SQL Server, ou um Microsoft IIS, mas já tive um problema destes com algumas aplicações PHP rodando sobre o Apache com bases MySQL e PostgreSQL.

    No meu caso o problema era a codificação que o Apache informava ao navegador. Por mais incrível que pareça o @header(“Content-type blablabla…) estava de acordo com a base de dados (ISO8859-1 ou LATIN1; mas o Apache informava ao navegador que a codificação era UTF-8).

    Para resolver isto no Apache é só modificar a diretiva AddDefaultCharset ISO-8859-1 que pode estar diretamente no seu arquivo de configuração principal, ou na configuração de um subdomínio que você tenha criado (reinicie o serviço após a mudança).

    No IIS não faço a menor idéia de onde seja, mas provavelmente o problema é o mesmo. Outra coisa importante também e verificar se o charset dos seus arquivos “.php” está correto. Você pode ter arquivos codificados como ISO8859-1, CP850, Windows 1251, UTF8 ou uma salada de tudo isso e no final você terá uma zona de codificação.

    Também, não vejo a hora do Unicode pegar de verdade para acabar com esta zona.

    Abraço.

  3. Amigos, boa tarde.
    O problema que estou tendo com o OCS é o seguinte: Quando o OCS realiza a coleta das informações e quando eu vou consultar os relatórios, acontece que os programas e o sistema operacional instalado aparecem com caracteres: ex: “Atualização de Segurança para Windows XP”. Vcs já passaram por esta questão? Abraço a todos.

  4. Olá @Arthur ,

    Verifique qual é o charset padrão do seu servidor web.

    No meu caso (Apache2) é o arquivo /etc/apache2/conf.d/charset e está configurado como: “AddDefaultCharset UTF-8”

    Se você usa subdomínios no Apache de uma conferida no arquivo de configuração do subdomínio do OCS.

    Caso não haja nada por lá, ele estará usando a configuração padrão do Apache (o arquivo que citei acima). Você poderá adicionar então uma linha semelhante àquela que indiquei mas mudando o conjunto de caracteres de/para UTF-8 ou ISO8859-1 e ver qual corrige o problema.

  5. Olá denovo @Arthur ,

    Honestamente eu nunca usei Apache no Windows, e desde a versão 98 deste sistema que eu não tenho mais intimidade com ele, mas fiz uma busca no Google e encontrei um link que pode te ajudar [1].

    No texto o autor descreve como instalar e configurar o Apache em um Windows XP, descrevendo alguns recursos e pastas da instalação.

    Pelo minha rápida olhada no texto presumo que o arquivo esteja em algum lugar dentro de c:\arquivos de programas\apache group\apache2\conf, mas é melhor conferir direitinho. Não esqueça que alterações nos arquivos de configuração do Apache só tornam-se válidas após reiniciar o serviço.

    [1] Bokma, John. Installing and configuring Apache on Windows XP: Virtual hosts. Disponível em http://johnbokma.com/windows/apache-virtual-hosts-xp.html

  6. Meu caro, muito obrigado. Segui suas dicas e funcionou perfeitamente!!!

    Alem disso claro eu fiz estes passos.

    1. Dar permissão ao arquivo brazilian_portuguese.txt
    chmod 777 /usr/share/ocsinventory-reports/ocsreports/languages/brazilian_portuguese.txt

    2.Modificar o charset do arquivo Brazilian_portuguese.txt

    cat /usr/share/ocsinventory-reports/ocsreports/languages/brazilian_portuguese.txt | iconv -f iso8859-1 -t UTF-8 -o brazilian_portuguese.txt

    mv Brazilian_portuguese.txt /usr/share/ocsinventory-reports/ocsreports/languages/brazilian_portuguese.txt

    3.Pelo ocsweb traduzir com o texto abaixo:

    0 utf-8
    1 Requisições
    2 Todos os computadores
    3 Computadores com software…
    […]TEXTO MUITO LONGO TRUNCADO […]
    813 Número de discos rígidos com espaço livre >
    814 Número de discos rígidos com espaço livre <
    815 Número de discos rígidos com espaço livre entre
    816 Tamanho máximo de espaço livre em disco rígido
    817 Tamanho mínimo de espaço livre em disco rígido

    Um forte abraço!!!!

  7. Boa tarde Pessoal,,,
    estou com o OCS + GLPI instalado, configurado e funcionando na empresa, só que um dos Chefes descobriu que um software chamado “Dropbox” não esta aparecendo no inventario.
    Alguem ja pegou esse problema com esse software ou outro qualquer?
    podem me ajudar por favor
    muito obrigado e fico no aguardo.

  8. Olá Welington,,,
    obrigado pela resposta,,,
    vc poderia me ajuadar a instalar esse plugin, pois nunca instalei um plugin no OCS e tambem não entendi direito oque é para fazer realmente.

  9. Olá denovo @Fabio ,

    Eu também nunca instalei plugins no OCS e pra ser honesto há muito tempo não mexo mais com ele. Acredito que as informações naquela página e também a própria documentação do OCS-Inventory possam te ajudar com esta tarefa, ou até mesmo valha a pena se inscrever naquele forum, de onde localizei a informação, e contactar as pessoas quem deram aquela sugestão. Desculpe não poder te ajudar nessa. Boa sorte com o trabalho.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.