Preparando o Tomcat para UTF-8

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.