Encoding de Caracteres - Problemas com Acentos em Sites

De Wiki Integrator do Brasil
Ir para: navegação, pesquisa
Banner-wiki-promocoes.gif


Índice

Encoding Padrão do Servidor e alguns serviços

O encoding padrão do sistema operacional Linux/Unix é UTF-8.

  • Bancos de dados: Os serviços MySQL, PostgreSQL e outros, seguem este encoding por padrão.
  • Arquivos criados no servidor: Seguem o padrão de encoding do sistema operacional
  • Servidores Java: Tomcat, JBoss/Wildfly, Jetty e GlassFish trabalham com Encoding ISO-8859-1


Encoding de Caracteres - Qual a causa dos acentos aparecerem errados no site?

No Português, assim como diversas línguas do idioma de origem latina, usamos acentos. Muitas palavras possuem acentos em letras como ç ou ã . Se ao abrir seu site, essas letras, por exemplo, surgirem como ou ç ã, significa que seu site está tentando exibir caracteres gravados em um encoding, cujo o browser não está reconhecendo.
Se aparecer em , isso significa que sua página está em ISO-8859-1 mas está com dados armazenados em UTF-8 . Não importa em qual local armazenou, se foi em banco de dados ou em arquivos, o que importa é que está com caracteres em UTF-8.
Entretanto, se aparecer algo como ç , ou outros de forma estranhamente similar, a sua página está em UTF-8 , porém, com caracteres armazenados em ISO-8859-1 .

Contornando o problema

A exibição correta somente ocorrerá se um dos dois modos abaixo for realizado:

1) Armazenar os dados com a codificação correta
2) Trocar a codificação de exibição do site

A forma mais simples, evidentemente, é a opção 2). A forma de trocar a exibição de caracteres no browser é informá-lo o que é usado. Para isso, usamos a tag no HTML <meta />. Veja como:

Digamos que gravamos em ISO-8859-1 e queremos exibir desta forma, logo, basta adicionar a tag conforme informado abaixo.
<html>
<head>
<title>Seu site</title>
<meta http-equiv= "Content-Type" content= "text/html; charset=iso-8859-1" >

Armazenamento de arquivos e o arquivo salvo

Mesmo que especifique em um cabeçalho usando a tag HTML <meta />, o arquivo deve estar na codificação equivalente ao charset especificado, para que tudo funcione em harmonia.
Na utilização da tag HTML <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> , o arquivo também deve estar salvo na mesma codificação "ISO-8859-1". Quando se salva um arquivo, em qualquer editor moderno de HTML ou de textos, tais características são apresentadas na caixa de diálogo de salvamento.

Banco de Dados

Em banco de dados, existem diferenças entre MySQL e PostgreSQL.
No MySQL, o encoding da base de dados, ou melhor dizendo, o collation, pode ser alterado no cPanel em "Banco de Dados  » phpMyAdmin", onde, na janela do phpMyAdmin, clique sobre o banco de dados, vá em "Operações/Operations" e altere em "Colação/Collation", confirmando em "Executar/Go"'’'.

No PostgreSQL, o default é UTF-8 e não há como mudar.

IMPORTANTE: Não haverá nenhum problema de exibição do caracteres se gravar como ISO-8851-1 ou UTF-8, desde que, na hora da busca destas informações, os dados ao serem exibidos pelo seu aplicativo estejam operando no mesmo encoding .

Qual o melhor padrão de caractere encoding?

A diferença entre ISO-8859-1 e UTF-8 é o suporte de caracteres. Enquanto que o ISO-8859-1 suporta até 256 caracteres (0 a 255, ou 0x00 a 0xFF), o UTF-8 suporta até 65.536 caracteres (0 a 65535, ou 0x0000 a 0xFFFF), ou seja, o UTF-8 possui uma base de caracteres mais extensa.

O que leva a usar o ISO-8859-1 seria a economia de bytes, desde que, claro, o site possua uma enorme quantia de dados. Um caractere UTF-8 chega a ter o dobro do tamanho de um caractere ISO-8859-1 mas, em contrapartida o UTF-8 suporta a maioria dos caracteres dos diversos países, o que acaba fazendo do UTF-8 um padrão internacional, utilizado largamente na grande maioria dos sistemas operacionais e serviços.