[RESOLVIDO] Problemas de Encoding (Acentuação)

Bom Dia,

Sei que esse é um assunto bastante discutido, já li diversos tópicos e página na internet mas não estou conseguindo resolver o problema.

Situação: No Flex eu faço uma chamada para um servlet e passo parâmetros.

Testes:

1.Na leitura do request:

[code]if(request.getParameter(“VALOR_1”) != null){

System.out.println( request.getParameter(“VALOR_1”));
System.out.println( new String(request.getParameter(“VALOR_1”).getBytes(“UTF-8”), “UTF-8”));
System.out.println( new String(request.getParameter(“VALOR_1”).getBytes(“ISO-8859-1”), “ISO-8859-1”));
System.out.println( new String(“ÇÁÕ”.getBytes(), “UTF-8”) );
System.out.println( new String(“ÇÁÕ”.getBytes(), “ISO-8859-1”) );
System.out.println( new String(“ÇÁÕ”.getBytes(“UTF-8”), “UTF-8”) );
System.out.println( new String(“ÇÁÕ”.getBytes(“ISO-8859-1”), “ISO-8859-1”) );

}[/code]

Resultado: (O VALOR_1 é Ç)

Ã? //'normal' está errado
Ã? //lendo e escrevendo em UTF-8 também da erro
Ã? //lendo e escrevendo em ISO-8859-1 dá erro.. NENHUM DOS ENCODINGS DEU NO REQUEST
??? //escrevendo em UTF-8 dá erro
ÇÁÕ //escrevendo em ISO-8859-1 OK!
ÇÁÕ //lendo e escrevendo em UTF-8 OK!
ÇÁÕ //lendo e escrevendo em ISO-8859-1 OK!

Outro detalhe é que usando a leitura e escrita em UTF-8 consigo ler caracteres com acento agudo.

2.Falam que se está vindo em UTF-8, ler em UTF-8 sempre manter um padrão para não misturar encodings:
E, como eu escrevendo a String manualmente não apresenta problema nos encoding, provavelmente o encoding do request está errado. Mas…

System.out.println( "Character Encoding: " + request.getCharacterEncoding() ); request.setCharacterEncoding("UTF-8"); System.out.println( "Character Encoding: " + request.getCharacterEncoding() );

Resultado:

null UTF-8

O encoding está vazio, e depois coloco ele como UTF-8.E mesmo assim ocorre o problema.

Estou testando e pesquisando a manhã toda e não consigo achar uma solução

Olá.
Tente assim:

request.setCharacterEncoding("UTF8"); if(request.getParameter("VALOR_1") != null) System.out.println( request.getParameter("VALOR_1")); }
[]'s
JL

Não deu certo :?

Uma perguntinha tola: No cabeçalho do seu MXML tem a tag de UTF-8?

[]'s
JL

Sim, inclusive acho que sem a tag nem compila…
Mas o encoding é utf-8 sim

[quote=RafaelViana]Sim, inclusive acho que sem a tag nem compila…
Mas o encoding é utf-8 sim [/quote]

Tem como postar aqui o código que você usa para chamar o Servlet pelo Flex?

[]'s
JL

[code]var url : URLRequest = new URLRequest(enderecodaservlet);
var variables:URLVariables = new URLVariables(); //preencho com parametros que serão passados para o relatório

url.data = variables;

navigateToURL(url, “_blank”);[/code]

tentei colocar:

url.contentType = "text/html; charset=utf-8";

Mas também não funcionou…

Ninguém mais pensou em outro local em que possa estar o erro?

Ou em outros testes que posso fazer?

Problema parcialmente resolvido.

Como o meu dataSource é preenchido pelo Java (sem uso da servlet)ele não apresenta problemas de encoding.Só estou enfrentando problemas ao passar parâmetros do Flex para o Java pela servlet.

Como esse parâmetros são usados apenas para mostrar quais são os filtros atuais do relatório, peguei uma função de actionScript para retirar os acentos e caracteres especiais antes de enviar o parãmetro para a servlet, isso resolve o problema dos caracteres estranho :smiley:

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!

1 curtida