[RESOLVIDO] Receber caracteres especial no Servlet (letras acentuadas)

6 respostas
F

Boa tarde galera, estou com um problema, estou enviando informações através de um Input:

<form name="enviaFiltro" action="http://localhost:8080/treinamento/AlunoServlet?acao=listar" method="post"> <input id="filtro" name="filtro" class="text" type="text" value=""/> <a class="linkMenuPrincipal" href="#" onclick="enviaFiltro.submit()">Listar Alunos</a> </form>
até aí tudo bem, o negócio é receber esses dados no Servlet, como faço pra receber de forma correta os caracters com acento?

Ex.:

String filtro = request.getParameter("filtro"); System.out.println("filtro "+filtro);
ao enviar “á” recebo: á

desde já agradeço a colaboração.

6 Respostas

S

Você precisa definir o encoding do request

ou dependendo do encoding

F
sergio7888:
Você precisa definir o encoding do request
request.setCharacterEncoding("UTF-8")
ou dependendo do encoding
request.setCharacterEncoding("ISO-8859-1")

obrigado pela ajuda.

cloquei assim (o encode definido no JSP é o UTF-8):
request.setCharacterEncoding("UTF-8");
		HttpSession session = request.getSession();
		session.setAttribute("mapAlunos", mapAlunos);
mas continuou da mesma forma, fiz algo errado? essa implementação está no meu método lista do meu servlet:
private void listar(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		
		@SuppressWarnings("unchecked")		
		Map<String, AlunoTO> mapAlunos = (Map<String, AlunoTO>) request.getSession().getServletContext().getAttribute("alunos");
		
		HttpSession session = request.getSession();
		session.setAttribute("mapAlunos", mapAlunos);	
	        request.setCharacterEncoding("UTF-8");
		String filtro = request.getParameter("filtro");	
		System.out.println("filtro "+filtro);
		
		
		String pagina = "/treinamento/aluno/alunoListar.jsp";
		session.setAttribute("pagina", pagina);
		request.setAttribute("targetPage", TreinamentoConstantes.FORM_LISTAGEM);		
		request.getRequestDispatcher("/treinamento/geral/mainLayoutBody.jsp").forward(request, response);		
	}
S

Verifique se a pagina que esta enviando esta em UTF-8, se estiver tente colocar ‘accept-charset=“UTF-8”’ na sua tag form pois o navegador pode estar enviando em um charset diferente.

F

dentro da minha tag head esta assim:

daí alterei o form onde está meu input para:

<form name="enviaFiltro" action="http://localhost:8080/treinamento/AlunoServlet?acao=listar" method="post" accept-charset="UTF-8"> <input id="filtro" name="filtro" class="text" type="text" value=""/> <a class="linkMenuPrincipal" href="#" onclick="enviaFiltro.submit()">Listar Alunos</a> </form>
mas o resultado continuou o mesmo

S

Após teste vejo que o problema não esta no encode do request
se você colocar no seu servlet

ServletOutputStream out = response.getOutputStream(); out.println("filtro " + filtro); out.println("á"); System.out.println("filtro " + filtro); System.out.println("á");
verá que o problema esta na forma que o System.out escreve os acentos.

Se necesssario remova o request.setCharacterEncoding

F

primeiramente agradeço pela ajuda.

Testei algumas sugestões, mas a q funcionou foi a de simplesmente alterar o charset de utf-8 para iso-8859-1 na minha JSP.

abraço.

Criado 5 de abril de 2013
Ultima resposta 9 de abr. de 2013
Respostas 6
Participantes 2