Preparando o Tomcat para UTF-8
1. Introdução
UTF-8 é a codificação de caracteres mais comum usada em aplicativos da web. Ele suporta todos os idiomas atualmente falados no mundo, incluindo chinês, coreano e japonês.
Neste artigo, demonstramos toda a configuração necessária para garantir o UTF-8 no Tomcat.
2. Configuração do Conector
Um conector escuta as conexões em uma porta específica. Precisamos ter certeza de queall of our Connectors use UTF-8 to encode requests.
Vamos adicionar o parâmetroURIEncoding=”UTF-8″ a todos os conectores emTOMCAT_ROOT/conf/server.xml:
3. Filtro de conjunto de caracteres
Depois de configurar o conector, é hora de forçar o aplicativo da web a lidar com todas as solicitações e respostas em UTF-8.
Vamos definir uma classe chamadaCharacterSetFilter:
public class CharacterSetFilter implements Filter {
// ...
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain next) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
next.doFilter(request, response);
}
// ...
}
Precisamos adicionar o filtro aoweb.xml do nosso aplicativo para que ele seja aplicado a todas as solicitações e respostas:
CharacterSetFilter
com.example.CharacterSetFilter
CharacterSetFilter
/*
4. Codificação da página do servidor
A outra parte do nosso aplicativo da web que precisamos configurar são as páginas do servidor Java.
Obest way to ensure UTF-8 in server pages is to add this tag at the top of each JSP page:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
5. Codificação de página HTML
Enquanto a codificação de página do servidor informa à JVM como manipular caracteres da página, a codificação de página HTML informa ao navegador como manipular caracteres da página.
Devemos adicionar esta tag<meta> na seçãohead de todas as páginas HTML:
6. Configuração do servidor MySQL
Agora que nosso Tomcat está configurado, é hora de configurar o banco de dados.
Assumimos que um servidor MySQL seja usado. O arquivo de configuração é denominadomy.ini no Windows emy.cnf no Linux.
Precisamos encontrar o arquivo de configuração, procurar esses parâmetros e editá-los de acordo:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Precisamos reiniciar o servidor MySQL para que as alterações entrem em vigor.
7. Configuração do banco de dados MySQL
A configuração do conjunto de caracteres do servidor MySQL é aplicada apenas a novos bancos de dados. Precisamos migrar os antigos manualmente. Isso pode ser facilmente alcançado usando alguns comandos.
Para cada banco de dados:
ALTER DATABASE database_name CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
Para cada tabela:
ALTER TABLE table_name CONVERT TO
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Para cada colunaVARCHAR ouTEXT:
ALTER TABLE table_name CHANGE column_name column_name
VARCHAR(69) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Se estivermos passando dados com caracteres UTF-8 em consultas de banco de dados, precisamos garantir que qualquer conexão de banco de dados feita seja compatível com a codificação UTF-8.
Para conexão baseada em JDBC, isso pode ser alcançado com o seguinte URL de conexão:
jdbc:mysql://localhost:3306/?useUnicode=yes;characterEncoding=UTF-8
8. Conclusão
Neste artigo, demonstramos como garantir que o Tomcat use a codificação UTF-8.