Problemas de acentuação com UTF-8 [Resolvido]

Pessoal, ontem eu até tinha postado um tópico sobre o assunto porque eu
estava com problemas de acentuação usando o ISO-9958-1 e resolvi
mudar tudo pra UTF-8 pensando que ia resolver. Acontece que ainda
continuo com os problemas.
Estou usando o MySQL e quando executo a sentença:

SHOW VARIABLES LIKE 'character_set%';

Todos resultados aparecem como utf-8, como abaixo:

‘character_set_client’, ‘utf8’
‘character_set_connection’, ‘utf8’
‘character_set_database’, ‘utf8’
‘character_set_filesystem’, ‘binary’
‘character_set_results’, ‘utf8’
‘character_set_server’, ‘utf8’
‘character_set_system’, ‘utf8’
‘character_sets_dir’, ‘C:\Program Files\MySQL\MySQL Server 5.1\share\charsets’

Todas minhas páginas JSP possuem no cabeçalho:

<%@page contentType="text/html" pageEncoding="UTF-8"%>

E dentro da tag head:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Os servlets também tem:

response.setContentType("text/html;charset=UTF-8");

Como vocês podem ver está tudo dentro dos padrões, e mesmo assim quando faço um insert no banco
a acentuação fica errada. Tem mais alguma coisa que eu possa fazer?

Desde já agradeço a atenção.

Mas antes de salvar as informações os caracteres ja apresentam problemas?
Onde realmente acontece o problema, na parte Java ou MySql?
Tive um problema destes quando utilizava o jetty dentro de um linux, precisei colocar o charset do linux como utf-8

Olá, analisa se o problema está ocorrendo no redirecionar das páginas
e se já chega no banco com erro.

at

Pelo que estou vendo aqui o problema está na minha aplicação, porque quando vou debugar a
query ela está assim:

"INSERT INTO pedidos(... OBSERVACAO, ...) values (..., 'ã  ç é á ó', ... )

Verificando mais a fundo ví que o servlet já está recebendo com acentuação errada, ou seja,
a página JSP está enviando os dados do form errado.

Tem alguma coisa muito estranha aí porque a página tem o encoding no cabeçalho e a tag
do charset.

Só dor de cabeça com essa acentuação…

Pessoal, paaaarece que consegui resolver o problema de acordo com a sugestão que um membro do guj deu nesse tópico:

http://www.guj.com.br/java/197069-resolvido-problemas-de-encoding-acentuacao-

De acordo com ele, antes de receber os parâmetros deve-se colocar um:

request.setCharacterEncoding("UTF-8");

Só não vou colocar o tópico como resolvido porque quero ver se isso vai continuar funcionando amanhã.

Editado -----> Até o momento está funcionando beleza. A única coisa que resolveu o problema foi colocar o código acima. Espero que possa ajudar outros.

Olá novamente,

só para ajudar a outros que estejam com este problema
eu faço desta forma para FUNCIONAR NO LOCALHOST

no ServletController:

response.setContentType("text/html;charset=UTF-8");

na página jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

PARA FUNCIONAR NO SERVIDOR WEB COMO, POR EXEMPLO, A INTEGRATOR

eu troco de “UTF-8” para “ISO-8859-1”

at

Desculpa estar ressucitando o tópico ,mais se eu por só no jsp e não por no Servelt pq ele não funciona!?
só pra efeito de conhecimento mesmo.

Só para enriquecer essa discussão, com Spring eu estava tendo o mesmo problema num formulário jsp simples que insere dados no banco. Consegui resolver quando adicionei estas linhas no web.xml:

  <filter>
     <filter-name>SetCharacterEncodingFilter</filter-name>
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF8</param-value>
     </init-param>
     <init-param>
         <param-name>forceEncoding</param-name>
         <param-value>true</param-value>
     </init-param>
  </filter>
  <filter-mapping>
     <filter-name>SetCharacterEncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>

Meu web.xml completo ficou assim:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>livros</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>  
  </welcome-file-list>
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>/WEB-INF/spring-context.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>	
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
  <filter>
     <filter-name>SetCharacterEncodingFilter</filter-name>
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF8</param-value>
     </init-param>
     <init-param>
         <param-name>forceEncoding</param-name>
         <param-value>true</param-value>
     </init-param>
  </filter>
  <filter-mapping>
     <filter-name>SetCharacterEncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

Esse foi o único lugar que alterei em todo o projeto. Depois disso não tive problemas com codificação.
Ps.: Estou usando UTF-8

Espero que isto ajude outros com o mesmo problema.
Abraços!

Colegas,

resolvi o meu problema com encoding de um modo mais simples, talvez possa ajudar alguém:

<%@ page contentType="text/html; charset=ISO-8859-1" language="java" pageEncoding="UTF-8" import="java.sql.*" errorPage="" %>

O UTF-8 deixou os caracteres da página acentuados corretamente e o ISO-8859-1 inseriu corretamente os dados no BD com codificação em UTF-8.

Não mudei nada no web.xml, nenhum filtro nem nada… Só adicionei o código acima na primeira linha do meu .jsp

Boa sorte a todos!!
Thiago Toscano

1 curtida

[quote=Leonardo Kennedy]Desculpa estar ressucitando o tópico ,mais se eu por só no jsp e não por no Servelt pq ele não funciona!?
só pra efeito de conhecimento mesmo.[/quote]

Muito obrigado! Salvou minha vida!

Defini meu form assim, para enviar por post informações para serem recuperadas pelo getParameter, para manipulação pela aplicação e envio para o banco de dados:



<form action="cadastro_laboratorio.jsp"  accept-charset="iso-8859-1,utf-8"  method="POST">
                        <div>
                            <input type="text" name="nome" class="form-control" placeholder="Nome" required>
                        </div>
                        <div>
                            <input type="text" name="area" class="form-control" placeholder="Área" required>
                         </div>
                        
                            <input type="submit"    class="btn btn-primary" value="Cadastrar">
                        
                    </form>

Mesmo estando definido na página e na aplicação não estava funcionado. Não fazia ideia desse atributo accept-charset da tag
Como já estava feito na diretiva page do JSP:

<%@ page language="java" contentType="text/html" pageEncoding="ISO-8859-1"%>

Como estava feito no header:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Mesmo essas declarações eram insuficientes. Foi muito útil para o projeto de meu TCC. Estava tudo perfeito até que quando fiz uma entrada digitada, pensei que a aplicação pararia de funcionar.

[quote=jamesfrj]Só para enriquecer essa discussão, com Spring eu estava tendo o mesmo problema num formulário jsp simples que insere dados no banco. Consegui resolver quando adicionei estas linhas no web.xml:

  <filter>
     <filter-name>SetCharacterEncodingFilter</filter-name>
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF8</param-value>
     </init-param>
     <init-param>
         <param-name>forceEncoding</param-name>
         <param-value>true</param-value>
     </init-param>
  </filter>
  <filter-mapping>
     <filter-name>SetCharacterEncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>

Meu web.xml completo ficou assim:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>livros</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>  
  </welcome-file-list>
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>/WEB-INF/spring-context.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>	
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
  <filter>
     <filter-name>SetCharacterEncodingFilter</filter-name>
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF8</param-value>
     </init-param>
     <init-param>
         <param-name>forceEncoding</param-name>
         <param-value>true</param-value>
     </init-param>
  </filter>
  <filter-mapping>
     <filter-name>SetCharacterEncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

Esse foi o único lugar que alterei em todo o projeto. Depois disso não tive problemas com codificação.
Ps.: Estou usando UTF-8

Espero que isto ajude outros com o mesmo problema.
Abraços![/quote]

jamesfrj cara muito obrigado por compartilhar sua solução,
Estou com este problema usando Spring a algum tempo e não encontrava solução.
Valeu mesmo!

poucos meses atrás, eu testei em Bootstrap com HTML usar dentro do META o UTF-8-BR e depois disso eu notei que todos os acentos brasileiros funcionaram.

[quote=ttoscano]Colegas,

resolvi o meu problema com encoding de um modo mais simples, talvez possa ajudar alguém:

<%@ page contentType="text/html; charset=ISO-8859-1" language="java" pageEncoding="UTF-8" import="java.sql.*" errorPage="" %>

O UTF-8 deixou os caracteres da página acentuados corretamente e o ISO-8859-1 inseriu corretamente os dados no BD com codificação em UTF-8.

Não mudei nada no web.xml, nenhum filtro nem nada… Só adicionei o código acima na primeira linha do meu .jsp

Boa sorte a todos!!
Thiago Toscano[/quote]

[quote=mtonon] Boa Tarde a todos,

Passando para agradecer a dica do colega ttoscano. Sou iniciante em jsp e servlets, e sua dica foi fundamental para resolver meus problemas com acentuação!

Muito Obrigado e muito sucesso a todos nós!!!

Mtonon[/quote]

Cara você é top mano, salvou minha noite de pesquisas e aposto que salvou também muita gente de virar a madrugada como eu em busca de uma luz. Abraço.

Boa tarde pessoal!
Gostaria de agradecer ao ttoscano. Depois de muita procura essa linha resolveu meus problemas.
Obrigado!

Galera, para quem quiser resolver manualmente, faz o seguinte:

  1. No eclipse, vá em Windows>Preferences;
  2. Pesquisa por Workspace;
  3. Altera Text file encoding para Other: UTF-8.

O que aconteceu para muitos como eu foi o seguinte: O Java envia os dados pro BD só que com outra codificação, e o “encoding” formata os dados para UTF-8 que aceita os acentos, por exemplo.

Sei que já está resolvido, mas é uma alternativa.
Boa sorte.

Caraca, depois de muitas tentativas, consegui resolver seguindo esses passos do ttoscano. Muito obrigado!