Tomcat + utf-8

Senhores estou utilizando o tomcat como servlet container.
Estou usando:

O meu eclipse está configurado pra usar utf-8

Meus cabeçalhos estão assim:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Quando passo um parâmetro por POST e olho no debug ou exibo em outra página ele não exibe os caractéres com acento corretamene.

Alguém já passou por isto?

Grato!

Não uso eclipse pra web, mas esses problemas com encoding são mto chatos.
Tive mtos problemas com um caracter aq, desisti de usá-lo e substituir por * só pq o NetBeans 5.5+Ubuntu 6+ISO… não reconheciam •

com iso funcionou blz, só que eu queria usar utf-8 pq tá virando padrão internacional. :s tsc tsc tsc

O problema com utf-8 e tomcat ainda persiste. será que ninguém tem este mesmo problema no mundo? tô ficando doido hahueahuaheuhaeuhu

Estou com quase com o mesmo problema.
Ao receber os dados do banco eles aparecem OK com os acentos certos. Mas na hora de gravar ele grava com caracteres estranhos.
Localmente no netbeans 6.1 funciona normal o estranho que isso so acontece no servidor web em produção.
Alguem tem uma solução?

Cara, o tomcat parece estar com problemas pra codificar com utf-8 eu tive que fazer um filtro que pega tudo da requisição e converte pra utf-8 antes de submeter.

Estou pensando em utilizar outro servlet container.

Muito estranho isso.
Localmente em uma maquina windows funciona.
No servidor linux da esse problema.

Olá a todos,
Estava eu procurando umas coisas do tomcat, acabei caindo aqui. Pois bem, não sei se os senhores ainda continuam com este problema, espero que não, mas para não deixar mais um post sem respostas vou colocar aqui como faço, quando preciso utilizar UTF-8.

Não sei qual é o cenário dos frameworks que estão utilizando, mas no meu caso utilizo tomcat =/ + spring + hibernate.

O tomcat, por padrão utiliza o encode do SO. Para resolver esse problema, no windows, você deve colocar o seguinte código:

Arquivo server.xml

<Connector ...  port="8080" redirectPort="8443" URIEncoding="UTF-8" ... />

Isso já resolve para as requisições via GET.

Para as requisições POST, como estou utilizando spring, posso utilizar o seguinte filter do spring:

Arquivo web.xml da sua aplicação.

[code]
charsetFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
UTF-8

<filter-mapping>
    <filter-name>charsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>[/code]

Esse probleminhas de encode são muito chatos. :evil:

Pois é pessoal, é isso. Não pensem que que é fácil utilizar UFT-8, quando se utiliza WIN.

Igor, bacana, você também é daqui de Maceió!

Espero ter colaborado.

Abraços

Ae blz? Pois é, esse lance de encoding é um saco, mas aos poucos a galera tá utilizando um padrão que é o unicode. Esse lance com o tomcat é mto sinistro, pois meu sistema operacional está configurado pra utf-8, mas as requisições post, passam os dados em ISO. Eu estou utilizando um filtro pra converter as requisições de iso pra utf-8 na marra, não é a melhor solução, nem a mais elegante, mas é a que funcionou comigo.

Blz, conterrâneo, valeu pelas informações :slight_smile:

Maravilha!!!

Obrigado Jairo pela dica, eu estava com o mesmo problema e minha plataforma é semelhante à sua (Vraptor+Spring+JPA), depois de acertar o banco de dados para UTF-8, notei que os caracteres acentuados já chegavam na minha classe Logic ilegiveis.

Sua dica foi otima, adicionei o Filtro do Spring e a configuração no Tomcat. Estou vendo no JSP e gravando no Banco, tudo certinho!!!

Grato.

Murilo

por incrível que pareça de você tirar a instrução de que é um jsp feito em utf-8, ele vai funcionar direito.

tire esta linha:

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

e funciona, eu só não sei de onde raios este problema vem hahahah

Estou com problema no netbeans com tomcat 5.x, já setei o server.xml, os cabecalhos jsp, catalina.xml, filter de conversão para utf-8. Mais ainda percebo que após request.getParameter(), minha aplicacao retorna erro de caracter. Alguem tem alguma dica ai.

server.xml

web.inf

<?xml version="1.0" encoding="UTF-8"?> Desenvolvimento Descritor do contexto de desenvolvimento.
<filter>
    <filter-name>charsetFilter</filter-name>
    <filter-class>com.sulwarenet.util.CharsetFilter</filter-class>
<init-param>
  <param-name>requestEncoding</param-name>
  <param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>    

import java.io.;
import java.net.
;

import javax.servlet.;
import javax.servlet.http.
;

public class CharsetFilter implements Filter {
FilterConfig config;
String encoding = “UTF-8”;

/**
 * @see javax.servlet.Filter#destroy()
 */
public void destroy() {
}

/**
 * Sets the character encoding on the request
 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
 */
public void doFilter(ServletRequest request, ServletResponse response,
		FilterChain chain) throws IOException, ServletException {
	request.setCharacterEncoding(encoding);
	chain.doFilter(request, response);    
}

/**
 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
 */
public void init(FilterConfig config) throws ServletException {
	this.config = config;
	this.encoding = config.getInitParameter("requestEncoding");
}

}

cabecalho jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>

Cara, por muito tempo tive este problema que era justamente com o vraptor dois, mas um colega resolveu este e no vraptor 3 já está mto bom.
O problema antigo era que tudo tava normal, mas os formulários passavam com o encode errado.
Eu criei um filtro sendo chamado no web.xml para todas as requisições, ele converte tudo para utf-8 e fica blz!

O Moska, Eu estou usando este filtro aqui ele funciona certo no tomcat 4.1.34, so que com tomcat 5.x que esta rodando com Net beans 5.0 da o erro.

public class CharsetFilter implements Filter {
FilterConfig config;
String encoding = “UTF-8”;

/**
 * @see javax.servlet.Filter#destroy()
 */
public void destroy() {
}

/**
 * Sets the character encoding on the request
 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
 */
public void doFilter(ServletRequest request, ServletResponse response,
		FilterChain chain) throws IOException, ServletException {
	request.setCharacterEncoding(encoding);
	chain.doFilter(request, response);    
}

/**
 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
 */
public void init(FilterConfig config) throws ServletException {
	this.config = config;
	this.encoding = config.getInitParameter("requestEncoding");
}

}

Esse pega legal no tomcat 6

package br.edu.uncisal.sgi.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class UTF8Converter implements Filter {
	
	public void destroy() { }

	/** Preform the filtering. */
	public void doFilter(ServletRequest request, ServletResponse response,
		FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		chain.doFilter(request, response);
	}

	public void init(FilterConfig config) throws ServletException { }

}

Só um detalhe quando você for pegar o stream de saída do servlet (se você for usar servlet) não pegue com o metodo getWriter e sim com getOutputStream, pois a classe printWriter não opera com utf8 por padrão, já a classe PrintOutputStream tem um contrutor que recebe um OutputStream e também uma string representando a codificação requerida, ai você pode usar utf8 para enviar dados para o tomcat exibir. Eu setei a jvm do tomcat com utf8 pra ver se a classe PrintWriter usaria UTF-8 mais , apesar de ser setado o encoding padrão para utf8(eu confirmei isso imprimindo na saida a propriedade que representa o encoding usando System.getProperty(“file.encoding”)) essa classe continuou a não usar UTF8.

Pra setar o encoding da jvm no tomcat 7 crie, no linux, o arquivo “setenv.sh” na pasta bin do diretorio do tomcat e acrescente essas linhas:

#!/bin/sh
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"

Se for no windows faça o sugerido nesse link abaixo
http://stackoverflow.com/questions/7738794/add-jvm-options-in-tomcat