Como Converter Arquivos TXT de UTF-8 para ANSI com PHP
Por Paulo RB em 22/01/2025
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
- Função
generateUtf8File:
- Gera um arquivo
.txt com codificação UTF-8.
- 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:
- 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.
- 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.
- Sem caracteres especiais, não há bytes adicionais:
- A codificação não precisa de bytes extras para representar letras simples.