O maior portal de MU Online do Brasil — desde 2003
Tutorial Intermediário Web

Como resolver erro de encoding de caracteres especiais no site e servidor de MU Online

Diagnostique e corrija problemas de encoding (acentos e caracteres especiais aparecendo como símbolos estranhos) no site, banco de dados e cliente do seu servidor de MU Online, cobrindo UTF-8, Latin1/ANSI e a codificação legada do cliente do jogo.

RO Rodrigo · Atualizado em 26 jan 2022 · ⏱ 14 min de leitura
Resposta rápida

Problemas de encoding — aquele texto cheio de símbolos estranhos como "ção" no lugar de "ção", ou interrogações no lugar de acentos — são frustrantes porque parecem cosméticos, mas na verdade indicam uma inconsistência estrutural entre as camadas do seu projeto: banco de dados, backend, HTML do si

Problemas de encoding — aquele texto cheio de símbolos estranhos como "ção" no lugar de "ção", ou interrogações no lugar de acentos — são frustrantes porque parecem cosméticos, mas na verdade indicam uma inconsistência estrutural entre as camadas do seu projeto: banco de dados, backend, HTML do site e, no caso do MU Online, até o próprio cliente do jogo com sua codificação legada. Resolver de forma superficial (trocar só o charset da página) costuma mascarar o sintoma sem corrigir a causa. Este tutorial percorre cada camada onde o encoding pode quebrar e como corrigir de forma definitiva.

O que é encoding e por que ele quebra

Encoding é a regra que traduz caracteres (letras, acentos, símbolos) em bytes armazenados/transmitidos. UTF-8 é o padrão universal atual, capaz de representar qualquer caractere de qualquer idioma. Latin1 (ISO-8859-1) e Windows-1252 (ANSI) são codificações mais antigas, usadas por muitos sistemas legados — incluindo o cliente clássico do MU Online. Quando uma camada do sistema grava em um encoding e outra lê assumindo um encoding diferente, o resultado é o "mojibake" clássico: ç vira ç, ã vira ã.

Onde o problema pode estar (mapa das camadas)

CamadaEncoding esperadoSintoma típico se errado
Banco de dados (charset/collation da tabela)utf8mb4 (MySQL/MariaDB)Texto salvo corretamente mas exibido com símbolos estranhos
Conexão do backend ao bancoDeve declarar utf8mb4 explicitamenteMesmo com banco correto, aparece errado se a conexão não declarar o charset
HTML da página (<meta charset>)UTF-8Página inteira com acentos quebrados, mesmo com banco correto
Cliente do jogo (MU)Codificação legada (varia por idioma/season)Nome de item/NPC/chat com símbolo estranho só dentro do jogo
Arquivos de configuração do servidor (.txt/.ini)Depende do emulador, frequentemente ANSITexto de skill/NPC corrompido só no servidor, site normal

Passo 1 — Confirmar o charset real do banco de dados

Não confie na documentação ou na lembrança de quem configurou — verifique diretamente. Em MySQL/MariaDB:

SHOW VARIABLES LIKE 'character_set_database';
SHOW TABLE STATUS WHERE Name = 'noticias';
SHOW FULL COLUMNS FROM noticias WHERE Field = 'conteudo';

Se o resultado mostrar latin1 ou utf8 (sem o mb4) em vez de utf8mb4, essa é uma pista forte da causa raiz — o utf8 "puro" do MySQL antigo não suporta 4 bytes por caractere (necessário para emojis e alguns símbolos), e frequentemente causa inconsistência com o resto da stack.

Passo 2 — Corrigir o charset e collation da tabela

Se a tabela estiver em um charset incorreto, converta com cuidado. A ordem importa: converter direto pode corromper dados já quebrados. Primeiro, faça backup completo:

mysqldump -u usuario -p --default-character-set=utf8mb4 nome_do_banco > backup_antes_encoding.sql

Depois, se os dados JÁ estiverem corrompidos (mojibake salvo no banco), a conversão correta costuma exigir um passo intermediário via binário:

ALTER TABLE noticias MODIFY conteudo BLOB;
ALTER TABLE noticias MODIFY conteudo TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Se os dados no banco já estão corretos (o problema é só na exibição), pule a conversão de dados e ajuste apenas a declaração de charset da tabela/coluna:

ALTER TABLE noticias CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Passo 3 — Garantir que a conexão do backend declare o charset

Mesmo com o banco corretamente em utf8mb4, se a conexão do backend (PHP, Node.js) não declarar o charset explicitamente, o MySQL pode negociar um charset padrão diferente (frequentemente latin1) e o mojibake volta a aparecer. Exemplo em PHP com PDO:

$pdo = new PDO(
    "mysql:host=localhost;dbname=viciadosmu;charset=utf8mb4",
    $usuario,
    $senha,
    [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"]
);

Em Node.js com mysql2:

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'usuario',
  database: 'viciadosmu',
  charset: 'utf8mb4'
});

Esquecer o charset/SET NAMES na conexão é, na prática, a causa mais comum de encoding quebrado em sites que já têm banco corretamente configurado.

Passo 4 — Declarar UTF-8 corretamente no HTML

A página precisa declarar o charset antes de qualquer conteúdo textual relevante, idealmente como a primeira tag dentro do <head>:

<head>
  <meta charset="UTF-8">
  <title>ViciadosMU</title>
</head>

Se essa tag estiver ausente ou vier depois de outras tags que já geraram bytes suficientes, alguns navegadores podem "adivinhar" o encoding errado antes de processar a declaração. Além disso, confirme que o servidor web (Nginx/Apache) não está enviando um cabeçalho HTTP Content-Type conflitante:

add_header Content-Type "text/html; charset=UTF-8";

Passo 5 — Testar a codificação legada do cliente do jogo

Diferente do site, o cliente do MU Online (especialmente em seasons mais antigas) frequentemente não usa UTF-8 internamente para textos de NPC, item e chat — ele usa uma codificação regional legada (variantes de Windows-125x conforme o idioma da season original). Isso significa que:

  • Textos com acentuação em arquivos de configuração do servidor (nomes de NPC, descrição de item) podem precisar ser salvos no encoding específico esperado pelo cliente, não em UTF-8.
  • Editar esses arquivos com um editor moderno que salva em UTF-8 por padrão (sem BOM correto) é uma causa comum de corrupção de texto dentro do jogo, mesmo com o site funcionando perfeitamente.
ArquivoEncoding típico esperadoFerramenta recomendada
Configuração de NPC/item (.txt)ANSI/Windows-1252 (varia por season/idioma)Editor com opção explícita de "salvar como" encoding
Strings do cliente (Data/Local/)Depende da localização original do clienteTestar caractere por caractere antes de distribuir
Chat/nome de personagem (protocolo de rede)Frequentemente restrito a ASCIIValidar no core do emulador antes de permitir acento

Passo 6 — Validar nomes de personagem com acento (se for permitir)

Muitos emuladores restringem nomes de personagem a caracteres ASCII simples por herança do protocolo de rede original. Se você quiser permitir acentos, é necessário validar em três pontos: a rotina de criação de personagem no GameServer, a exibição no cliente (que pode não ter a fonte/glifo correto) e o armazenamento no banco. Teste com nomes reais contendo ç, ã, é antes de liberar ao público — um nome mal codificado pode travar a exibição de outros jogadores próximos no jogo.

Ferramentas úteis para diagnóstico rápido

FerramentaUso
SHOW FULL COLUMNS (SQL)Confirma charset/collation real de cada coluna
DevTools do navegador (Network → Headers)Confirma o Content-Type real enviado pelo servidor
Editor de texto com detecção de encoding (Notepad++, VS Code)Mostra e converte o encoding real de um arquivo .txt de configuração
iconv (linha de comando)Converte arquivos entre encodings de forma controlada
iconv -f WINDOWS-1252 -t UTF-8 arquivo_npc.txt -o arquivo_npc_utf8.txt

Erros comuns e soluções

SintomaCausa provávelSolução
Acentos viram "é", "ã" no siteBanco em latin1/utf8 sem mb4, ou conexão sem SET NAMESConverter tabela para utf8mb4 e declarar charset na conexão
Site normal, mas jogo mostra símbolo estranho em NPCArquivo de configuração salvo em encoding errado para o clienteSalvar arquivo no encoding legado esperado (via iconv ou editor específico)
Só alguns caracteres quebram (emoji, símbolos raros)Uso de utf8 (3 bytes) em vez de utf8mb4 (4 bytes)Migrar coluna/tabela para utf8mb4
Nome de personagem com acento corrompe exibiçãoCliente/protocolo não suporta o caractereRestringir nomes a ASCII ou validar exaustivamente antes de liberar
Página exibe interrogações no lugar de texto<meta charset> ausente ou cabeçalho HTTP conflitanteAdicionar <meta charset="UTF-8"> como primeira tag do <head>

Checklist de correção de encoding

  • Charset real do banco de dados verificado via SHOW FULL COLUMNS.
  • Backup completo feito antes de qualquer conversão de charset/collation.
  • Tabelas/colunas migradas para utf8mb4 quando necessário.
  • Conexão do backend declarando charset explicitamente (SET NAMES/parâmetro de conexão).
  • <meta charset="UTF-8"> presente como primeira tag do <head>.
  • Cabeçalho HTTP Content-Type do servidor web sem conflito de charset.
  • Arquivos de configuração do servidor (NPC/item) testados no encoding esperado pelo cliente.
  • Nomes de personagem com acento validados nas três camadas (criação, exibição, armazenamento), se permitidos.

Com o encoding estabilizado em todas as camadas, é uma boa oportunidade para revisar outras inconsistências comuns entre site e servidor, como formatação de datas e timezone. Se você está montando a stack completa do zero, veja o guia de criação de servidor de MU Online.

Perguntas frequentes

Por que os acentos aparecem como símbolos estranhos (é, ã) no meu site?

Esse padrão clássico é sinal de 'mojibake': o texto foi salvo em UTF-8 mas está sendo lido/exibido como se fosse Latin1 (ou vice-versa). A causa mais comum é uma inconsistência entre o encoding declarado no banco de dados, na conexão do backend e no charset da página HTML.

O cliente do MU Online suporta UTF-8 nativamente?

Depende muito da versão/season. Muitos clientes legados (Season 6 e anteriores) foram construídos com codificações locais antigas (como Windows-1252 ou variantes CP para outros idiomas) e não lidam bem com UTF-8 puro em nomes de itens, NPCs e chat. É preciso testar caractere por caractere antes de assumir suporte total.

Preciso mudar o encoding do banco de dados inteiro para resolver?

Nem sempre. Às vezes o problema está apenas na string de conexão do backend ou no charset declarado no HTML, sem exigir migração de collation do banco. Sempre diagnostique a camada exata do problema antes de partir para uma migração completa, que é arriscada e demorada.

Como faço backup antes de mexer no encoding do banco?

Exporte um dump completo do banco (mysqldump ou equivalente) antes de qualquer ALTER de charset/collation. Migrações de encoding podem corromper dados existentes se o processo de conversão não for feito na ordem correta (converter para binário antes de trocar o charset declarado).

Nomes de personagem com acento causam bug no jogo?

Em muitos emuladores sim — nomes de personagem tradicionalmente são restritos a caracteres ASCII simples justamente por causa de limitações de encoding do cliente e do protocolo de rede original do MU. Permitir acento no nome exige validação cuidadosa e teste extensivo antes de liberar ao público.

RO
Fundador e editor-chefe

Rodrigo mantém o ViciadosMU desde os primórdios do portal. Especialista em criação e administração de servidores de MU Online, história do jogo e a evolução das seasons — escreveu boa parte do acervo antes de 2024.

Continue lendo

Artigos relacionados