Itens Tem Acento - Tem ou têm? Clique aqui, entenda como usar tem (sem acento) e têm (com ...
Tem ou têm? Clique aqui, entenda como usar tem (sem acento) e têm (com ...

Como lidar com itens que têm acento no dia a dia

itens tem acento: o que todo mundo erra na hora de processar

O problema não é escrever corretamente. O problema é quando você precisa passar strings com acentos por sistemas que não foram construídos para isso. Eu trabalhei anos integrando formulários de cadastro com APIs que retornavam JSON mal codificado e tinha que tratar caractere por caractere sem enlouquecer. A regra básica que poucas pessoas lembram: acentos em Português brasileiro são questões de codificação de caracteres, não de gramática. Você já sabe quais letras levam acento — á, ã, õ, é, ê, í, ó, ú, ç. O verdadeiro pesadelo começa quando esses caracteres viajam entre sistemas.

Minha experiência mais chata foi com um sistema legado que lia arquivos CSV gerados por uma planilha do Excel em Windows brasileiro. A codificação vinha como ISO-8859-1, mas o script de processamento que eu herdei forçava UTF-8. O resultado: cada acento virava um caractere estranho tipo á ou ã. Passei três horas refatorando a leitura do CSV para usar utf-8-bom e ainda assim corrigindo os registros que já haviam sido salvos errados no banco. A solução prática imediata é identificar a codificação antes de processar qualquer coisa. Se você estiver usando Python, a função open() com o parâmetro encoding='utf-8' resolve a maior parte dos casos. Se o arquivo vier de outra fonte, use a biblioteca chardet para detectar automaticamente:

import chardet
with open('arquivo.csv', 'rb') as f:
    resultado = chardet.detect(f.read(1000))
    print(resultado) Isso geralmente corta o tempo de debugging de horas para minutos, dependendo da complexidade do arquivo.

Os itens com acento mais problemáticos

Nem todos os acentos causam o mesmo nível de dor. Os que mais dão problema são aqueles que existem como combinações de múltiplos codepoints em UTF-8. O Ç, por exemplo, é tranquilo — é um único código de caractere. Mas o à e o Õ estão na linha de trembela quando cruzam com sistemas que confundem acento com til. Eu já vi bancos de dados que transformavam cãostinha em caostinha porque o collation estava configurado errado. Isso acontece especialmente com MySQL quando você define charset como latin1 e depois tenta migrar para utf8mb4 sem ajustar as colunas individualmente. Outro ponto cego: acentuação em maiúsculas. muita gente acha que não precisa acentuar letra maiúscula porque "ninguém usa". O novo acordo ortográfico mudou isso, mas ainda há sistemas que normalizam tudo para lowercase e perdem a distinção entre "Como" e "Cómo". Em português isso não faz diferença real, mas em integrações com sistemas espanhóis ou tratados bilíngues, a perda de acento em maiúsculas gera matching falho em buscas e relatórios.

A dica prática aqui é nunca confiar na normalização padrão do seu framework. Sempre faça normalize('NFC', texto) antes de salvar qualquer coisa no banco. NFC é o formato de compatibilidade canônica que garante que acentos combinados (como e + ) sejam representados como um único codepoint pré-composto. Sem isso, a mesma palavra pode existir como dois bytes diferentes dependendo de como foi digitada, e sua busca vai falhar silenciosamente.

👉 Clique no botão abaixo para saber mais sobre o assunto!

O que funciona na prática

Se você está construindo algo do zero, use UTF-8 em toda a cadeia. Banco, API, frontend, arquivos — tudo. Se estiver lidando com um sistema legado que não suporta, a melhor saída é criar uma camada de tradução entre o legado e o moderno. Um middleware simples que decodifica a entrada, normaliza com NFC, e reencoda para o formato que o sistema antigo espera resolve 90% dos casos sem modificar o código existente. Em JavaScript no navegador, encodeURIComponent e decodeURIComponent resolvem a maioria dos problemas de envio de formulários com acentos. Mas atenção: se você estiver usando URL para passar dados sensíveis entre páginas, esses caracteres acentuados ficam ilegíveis. Neste cenário específico, prefira payload JSON em vez de query string. É mais limpo e evita que par de horas sejam gastas debugando porque um acento quebrou o parsing.

Para quem trabalha com processamento de texto em larga escala — como indexação para busca ou análise de sentimentos — a normalização com NFC é praticamente obrigatória. Sem ela, índices duplicados aparecem porque "são" e "s\u00e3o" (com e+SBCD e til separados) são tratados como strings diferentes pelo algoritmo de busca. Isso infla o índice e piora a performance. Com a normalização adequada, o tempo de indexação cai significativamente e a qualidade dos resultados melhora porque a busca encontra todas as variações de acentuação.

Pegadinhas que ninguém conta

O primeiro erro comum é achar que acento é só questão de fonte. Se seu renderer mostra o caractere bonito, você pensa que está tudo certo. Mas a codificação interna pode estar errada e só aparece quando o dado sai do seu ambiente controlado. Teste sempre com inputs reais, não com textos digitados manualmente. O segundo erro é normalizar só na entrada. Se você normaliza o dado ao receber mas não normaliza ao recuperar para comparação, o problema persiste. A normalização precisa acontecer em todos os pontos de contato com dados textuais, não só no formulário.

O terceiro erro, e o mais barato de fazer mas caro de corrigir, é ignorar os casos especiais do português. Palavras como "pôr", "período", "herói" e "jibóia" têm acentos que variam conforme a regência e o contexto. Sistemas que tentam remover acentos automaticamente para facilitar busca podem eliminar a distinção entre "por" e "pôr", que em português são palavras diferentes com significados diferentes. Em alguns contextos isso não importa. Em outros, como processamento legal ou médico, a ambiguidade gera erro real.

Alternativas quando UTF-8 não é opção

Às vezes você não pode escolher a codificação. Talvez o sistema que você consome seja de um parceiro que ainda usa ISO-8859-1, ou talvez você esteja trabalhando com dados históricos escaneados. Nesses casos, a melhor abordagem é tratar a conversão como uma etapa separada do pipeline, nunca como um efeito colateral escondido. Um padrão que funciona bem é transformar todos os dados de entrada em um formato intermediário normalizado (UTF-8 com NFC) o mais rápido possível, e só depois fazer a conversão para o formato de destino se realmente necessário. Assim você mantém uma única versão da verdade e evita que erros de codificação se propaguem pelo sistema.

Se o dado vier de OCR ou digitalização, espere perdas de acento. Documentos antigos escaneados frequentemente perdem a acentuação porque o software de reconhecimento óptico não foi treinado com palavras acentuadas em português. Neste caso, o melhor é usar dicionários específicos da língua para corrigir automaticamente após o OCR, e não confiar no resultado bruto. A regra geral que eu segui durante anos é simples: trate acentuação como um problema de engenharia de dados, não como um problema de formulário. Se você construir seus pipelines pensando na codificação desde o início, não vai ter dor de cabeça no meio do caminho. E se tiver que lidar com um sistema legado chato, saiba que o problema quase sempre é de mapeamento de caracteres, não de acentos em si. Identificar a codificação original resolve metade da batalha.