Como converter o texto passado pelo usuário através de um formulário para utf-8?

Oi gente,

Estou com um problema que há dias não consigo resolver que é o seguinte: em uma página de cadastro de cliente foi me pedido que eu passasse toda a informação cadastrada pelo usuário por email para a sessão de atendimento da empresa antes que tudo fosse salvo no banco. Mas os dados que são passados pelo usuário estão aparecendo no email e no banco de dados com erro de decodificação dos caracteres (por exemplo: o nome Eustácio aparece como Eustácio).

Já tentei diversas táticas diferentes para sanar o problema mas sem sucesso em nenhuma. Já verifiquei as tags nos jsps que poderiam estar influindo nisso: inclui tags <%@ page pageEncoding=“utf-8” contentType=“text/html; charset=utf-8” language=“java” /> nas páginas envolvidas; a tag está definindo o charset correto; e inclui o atributo acceptCharset=“utf-8” nas tags dos jsps envolvidos. Já tentei fazer a conversão via código java também, usando InputStreamReader, CharsetDecoder e CharsetEncoder. Nada deu certo.

Segue abaixo o método que criei para tentar converter alguns campos do formulário para utf-8:

[code]private String[] convertToUtf8 (Client cliente) throws CharacterCodingException
{
String result[] = new String[3];
Charset charset = Charset.forName(“UTF-8”);
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();

  ByteBuffer bb = encoder.encode(CharBuffer.wrap(cliente.getFullName()));
  CharBuffer cb = decoder.decode(bb);
  String fullname = montarString(cb);
  result[0] = fullname;
  
  ByteBuffer bb1 = encoder.encode(CharBuffer.wrap(cliente.getMobileCarrier().getName()));
  cb = decoder.decode(bb1);
  String mobilecarrier = montarString(cb);
  result[1] = mobilecarrier;
  
  ByteBuffer bb2 = encoder.encode(CharBuffer.wrap(cliente.getHomeAddress().getFullAddressName()));
  cb = decoder.decode(bb2);
  String homeaddress = montarString(cb);
  result[2] = homeaddress;

  bb.clear(); bb1.clear(); bb2.clear();
  
  return result;

}[/code]

Alguém tem alguma sugestão? Desde já agradeço.

Leonel

Já esperimentou usar charset=windows-1252 ?

Não, mas o problema é que o portal deve ser mantido com codificação “utf-8” devido à uma possível internacionalização.

O grande problema de vc converter pra UTF-8 é descobrir qual a codificação utilizada.

Ja experimentou forçar no header isso:

Content-Type: text/html; charset=utf-8

Você por acaso estaria usando o tomcat? que sistema operacional vc está usando?

Sim, já fiz isso.

Sim, estou usando o tomcat 5.5, no Ubuntu 8.04

alem dessas dicas, o usuario não esta forçando utilizar no browser outra codificação.

iso acontece para vários usuarios ou algum isolado?

Pois é meu caro, também tive esse problema de codificação no Ubuntu 8.04 e 8.10
Usando o tomcat neste.

Eu tive que fazer um filtro pra pegar todo o conteúdo das requisições e converter na marra. Mas isso só acontece com o ubuntu + tomcat, pelo menos comigo.

Como assim fez um filtro para pegar o conteúdo das requisições? Como fez isso?

Para mandar o email, o seguinte método resolveu o problema (sei que não é geral, mas resolveu momentanemente):

private String toUTF8(String isoString)
   {
       String utf8String = null;   
       if (null != isoString && !isoString.equals(""))   
       {   
           try   
           {   
               byte[] stringBytesISO = isoString.getBytes("ISO-8859-1");   
               utf8String = new String(stringBytesISO, "UTF-8");   
           }   
           catch(UnsupportedEncodingException e)   
           {   
               // Mostra exceção mas devolve a mesma String   
               System.out.println("UnsupportedEncodingException: " + e.getMessage());   
               utf8String = isoString;   
           }   
       }   
       else   
       {   
           utf8String = isoString;   
       }   
       return utf8String;   
   }

Para salvar no banco utilizei o mesmo métod, mas em outros pontos do código, em que as entidades eram preenchidas.

Bom, obrigado a todos pela ajuda.

Até

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 { }

}

Coloquei no web.xml pra toda requisição que for feita pelo meu command, passar por este filtro, assim tudo é convertido pra utf-8 na marra.

Hmmm… Ideia muito boa m0ska… Vou ver se rola de adotar isso no projeto aqui…
Valeu a dica…

m0ska , sua sujestão funcionou direitinho .

valew pela dica