PauloRB.dev

Desenvolvedor de Software

Como Converter Arquivos TXT de UTF-8 para ANSI com PHP | PauloRB.dev Como Converter Arquivos TXT de UTF-8 para ANSI com PHP – PauloRB.dev
Como Converter Arquivos TXT de UTF-8 para ANSI com PHP

Como Converter Arquivos TXT de UTF-8 para ANSI com PHP

Quando lidamos com arquivos de texto, a codificação de caracteres é um aspecto fundamental para garantir que os textos sejam exibidos corretamente. No entanto, em muitos casos, especialmente em sistemas legados, pode ser necessário converter arquivos de uma codificação moderna, como UTF-8, para ANSI (ISO-8859-1). Este artigo explica como fazer isso usando PHP, com exemplos práticos.

Diferença entre UTF-8 e ANSI

  • UTF-8: Uma codificação moderna e amplamente usada que suporta uma ampla gama de caracteres, incluindo idiomas com caracteres especiais e emojis. Ela é retrocompatível com ASCII.
  • ANSI (ISO-8859-1): Codificação mais antiga e limitada que suporta apenas caracteres latinos e não é compatível com idiomas mais complexos.

No caso de arquivos sem caracteres acentuados ou especiais, como “Este e um texto de exemplo”, ambos os formatos podem ser exibidos de forma idêntica em editores simples como o Bloco de Notas.


Problema Prático

Se você criar um arquivo de texto sem caracteres acentuados, como:

$content = "Este e um texto de exemplo. Sem caracteres especiais!";

Ele será salvo corretamente em UTF-8, mas parecerá “igual” ao ser visualizado como ASCII, porque os caracteres usados pertencem à faixa básica compatível entre UTF-8 e ASCII.

Porém, ao lidar com arquivos que precisam estar especificamente em ANSI, a conversão é necessária.

Exemplo Completo em PHP

Gerar um Arquivo UTF-8 e Convertê-lo para ANSI

O seguinte script gera um arquivo .txt em UTF-8 e o converte para ANSI:

<?php

function generateUtf8File($filePath, $content)
{
    // Gera um arquivo UTF-8
    file_put_contents($filePath, $content);
    echo "Arquivo UTF-8 gerado em: $filePath\n";
}

function convertToAnsi($inputFile, $outputFile)
{
    // Verifica se o arquivo de entrada existe
    if (!file_exists($inputFile)) {
        throw new Exception("O arquivo de entrada não foi encontrado: $inputFile");
    }

    // Lê o conteúdo do arquivo
    $content = file_get_contents($inputFile);

    // Converte o conteúdo para ANSI (ISO-8859-1)
    $ansiContent = iconv("UTF-8", "ISO-8859-1//IGNORE", $content);

    // Grava o conteúdo convertido no arquivo de saída
    file_put_contents($outputFile, $ansiContent);

    echo "Arquivo convertido para ANSI e salvo em: $outputFile\n";
}

// Caminhos dos arquivos
$utf8File = 'arquivo_utf8.txt';
$ansiFile = 'arquivo_ansi.txt';

// Conteúdo do arquivo UTF-8
$content = "Este é um texto de exemplo. Sem caracteres especiais!";

// Gera o arquivo UTF-8
generateUtf8File($utf8File, $content);

// Converte para ANSI
try {
    convertToAnsi($utf8File, $ansiFile);
} catch (Exception $e) {
    echo "Erro: " . $e->getMessage() . "\n";

Explicação do Código

  1. Função generateUtf8File:
    • Gera um arquivo .txt com codificação UTF-8.
  2. Função convertToAnsi:
    • Lê o arquivo criado.
    • Usa a função iconv para converter o conteúdo de UTF-8 para ANSI (ISO-8859-1).
    • Salva o arquivo convertido com um novo nome.

 

Por Que o Texto Sem Acentos Parece Igual em ANSI e UTF-8?

Arquivos sem caracteres especiais são exibidos corretamente porque:

  1. UTF-8 é compatível com ASCII:
    • Letras, números e pontuações na faixa de 0 a 127 são representados exatamente da mesma forma em ambas as codificações.
  2. O Bloco de Notas reconhece UTF-8 automaticamente:
    • Mesmo que o arquivo seja UTF-8, o Bloco de Notas interpreta corretamente caracteres básicos sem a necessidade de ajustes adicionais.
  3. Sem caracteres especiais, não há bytes adicionais:
    • A codificação não precisa de bytes extras para representar letras simples.

 

 

Mais Posts

🔍Laravel: Eloquent vs Query Builder — Qual usar para cada situação?

🔍Laravel: Eloquent vs Query Builder — Qual usar para cada situação?

No ecossistema Laravel, há duas formas principais de interagir com o banco de dados: o Eloquent ORM e o Query... Leia mais

Solucionando Problemas de Conexão no PostgreSQL: Um Guia Prático

Solucionando Problemas de Conexão no PostgreSQL: Um Guia Prático

Quando se trata de gerenciar bancos de dados, o PostgreSQL se destaca como uma escolha robusta e flexível para desenvolvedores... Leia mais

Gerando Dados Fictícios para Análise de Compras em Python

Gerando Dados Fictícios para Análise de Compras em Python

Ao realizar estudos de análise de dados ou ao testar sistemas que lidam com grandes volumes de informações, é comum... Leia mais

Importando Dados de um Arquivo CSV para o PostgreSQL Usando PDO::pgsqlCopyFromArray no Laravel

Importando Dados de um Arquivo CSV para o PostgreSQL Usando PDO::pgsqlCopyFromArray no Laravel

O método PDO::pgsqlCopyFromArray permite copiar dados de um array diretamente para uma tabela no PostgreSQL. Este tutorial mostra como usar... Leia mais