Problema com enconding em Java e Mysql. [NÃO RESOLVIDO]

Oi,

Estou com problema de enconding com Java e mysql. Eu tentei alterar a minha table mysql para utf-8, porém sem sucesso, e também setar a caractere enconding em meu servlet, responsavel por fazer a busca no mysql. Veja:

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

response.setCharacterEncoding("UTF-8"); // em meu servlet.

Quando o usuário digitar um texto, vai passar para um parametro para o servlet, após isso, é feito uma busca se o o texto do usuário encontra-se na table mysql. Quando o usuário digita acentos, eu não consigo achar nenhuma informação referente aquele texto, sabendo que, o texto existe no banco de dados.
Exemplo:

“Brasil é o maior mercado…”

Como posso resolver o problema ?

você tem que verificar uma coisa, o problema é o retorno da query ou o problema está no momento em que vai ser realizada a query? o que vem da interface do usuário está vindo acentuado direitinho ou já vem com o “Brasil é o maior mercado…”
Debuga e da uma olhada nisso.

A palestra do André e do Andrei no TDC 2012 sobre encoding foi excelente, você pode ver os slides em http://www.slideshare.net/dextra/minicurso-encoding-tdc2012-13988649
O pessoal normalmente vai trocando o encoding até acertar. Não sei se é o seu caso, mas recomendo a leitura dos slides para entender o motivo.

No slide 81 a 85 explica que nesta situação está sendo escrito em UTF-8 (2 bytes para “é”) e em algum momento está sendo lido com ISO-8859-1 (daqueles 2 bytes escritos em UTF-8, 1 lido como “Ô e outro como “©”).

Minha sugestão é a mesma que a do andre.froes.
No seu caso precisas descobrir onde está ocorrendo a leitura com o enconding ISO-8859-1 e trocá-lo por UTF-8.
Tente olhar se na página está o content-type com o charset, olhe também na configuração do apache / tomcat / jboss.

Olá, rock!

Muito bom o link que você passou. Obrigado!
Eu acho que acabei de achar o problema. Bem, me parece que não está UTF-8, quando eu passo a informação por parametro para o meu servlet. Veja bem. Eu tenho um jsp, que será responsável por pegar o título em um banco de dados. Está funcionando corretamente com todos os acentos, ou seja, por aí, o problema não está no banco de dados. Porém, quando eu vou clicar na mensagem, vai redirecionar para o servlet, e usando essa mesma mensagem, vai buscar no banco de dados. Mas, o erro está ao passar o parametro para o servlet. Ou seja, quando passa para o servlet, não passa com os acentos. Eu percebi isso, ao exibir a mensagem que está no parametro.
Veja:

String titulo = request.getParameter("titulo");
System.out.println(titulo);   

Saída:

“Brasil ?? o maior mercado…”

Atualizado: Depois de tantas pesquisas, eu acho que o problema está no Tomcat. Mas, eu já mudei todas os encoding, não resolveu o problema.
Para ISO-9959-1: Brasil é o maior mercado…
Default - inherited (ANSI_X3.4-1968): Brasil ?? o maior mercado…

Já mudei para várias, principalmente UTF-8, e nada, continua como se fosse ISO-9959-1. Sinceramente, que coisa mais chata de se mecher.
Lembrando também, que alterei o server.xml do Tomcat para URIEncoding=“UTF-8”. E o resultado ? Nada! Continua não funcionando!
Eu também tentei fazer:

			if(request.getCharacterEncoding() == null) 
				request.setCharacterEncoding("UTF-8");
				String titulo = request.getParameter("titulo");

Em JSP:

URLEnconde.encode("titulo aqui", "UTF-8");

Espero que alguém possa me da uma luz para poder resolver o problema. Já não sei mais o que fazer.

Atualizado

Finalmente eu consegui resolver o problema, depois de tanta, mas tanta pesquisa e sobretudo tentativas. Vejamos o problema:

Basta colocar o URLEnconder.encode para iso-8859-1 na sua URL que você deseja passar:

URLEncoder.encode("Titulo", "iso-8859-1")

Atualizado

Novamente estou tendo problemas com enconding, eu nunca na minha vida, eu vi algo tão chato quanto a isso. Veja bem.
Quando eu passo o parametro utilizando o iso-8859-1 conforme escrito acima, o servlet recebe e passo para um jsp com as caracteres corretas, porém, no browser aparece:
Network+%E0, ou seja, em vez de aparecer: Network à, aparece %E0.
Agora, se eu mudo de iso-8859-1, para UTF-8. No browser passa perfeitamente, ou seja: Network+à+, porém, quando vai colocar na página jsp, aparece: Network Ã. Agora, quando eu vou exibir antes de passar para o jsp, ou seja no servlet, aparece: Network ?.

O que eu faço ? Não aguento mais tentar resolver essa situação chata de encoding e nada!

To com este mesmo problema. O estranho que ocorre este problema apenas em um servidor, onde realmente ira ficar hospedado a aplicação. Aqui foi testado em outros 3 servidores funcionou normalmente. Banco de Dados não, o problema esta lá no “request.getParameter()” vindo com uma codificação diferente. Sabe me dizer se alguma configuração que esta ocasionando este tipo de erro?

Boa Noite,

O problema quando vem do HTML, você tem que converter seu arquivo em UTF-8;
No Dreamweaver, fica no PageProperties.
Abra seu arquivo com o bloco de notas e mude a codificação:

Uploaded with ImageShack.us

Sei que já a postagem já tem alguns meses mas vou responder assim mesmo pq está como não resolvido e também pq talvez ajude outros. Primeiramente sempre codifique o parâmetro ao redirecionar:

response.sendRedirect("/app/teste?param=" + URLEncoder.encode(minhaString, "UTF-8"));

Depois para exibir o valor correto na página JSP você tem duas opções:

  1. se tiver como configurar o tomcat, inclua no arquivo server.xml o parâmetro URIEncoding=“UTF-8”:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
2. Se sua hospedagem não lhe permite isso ou por algum outro motivo não funcionou, faça o seguinte:

out.println(new String(request.getParameter("param").getBytes("ISO-8859-1"), "UTF-8"));