2010-09-08 14 views
5

que estoy haciendo una simple llamada ajax con la biblioteca Javascript YahooUI de la siguiente manera:codificación UTF-8 y HTTP parámetros

YAHOO.util.Connect.setForm('myform'); 
YAHOO.util.Connect.asyncRequest('POST', url, ...); 

A continuación se presentan los ajustes en mi aplicación: Tomcat versión: 6.0.18

conector servidor Tomcat: URIEncoding = página webapp "UTF-8":

también se indica en YahooUI Documentos biblioteca conector:

setForm codificará cada forma HTML nombre del campo y valor usando encodeURIComponent. Esto da como resultado una cadena de pares codificados por UTF-8, nombre-valor . NOTA: Establecer un encabezado HTTP de "Content-Type" con un valor de conjunto de caracteres diferente no cambiará la codificación de los datos serializados. Codificación de los datos serializados.

puedo ver que los caracteres fritas que se envían como parámetros se codifican (en ie7 usando iehttpheader herramienta):

name=%C3%88%C3%A0%C3%B4 
    testParam=%C3%B4%C3%B4 

para los datos: nombre: EAO y TestParam: OO

Pero en el lado del servidor que estoy viendo los valores de la siguiente manera: ÃÂàÃ

Incluso si soy conv erting la cadena a bytes y luego crear una nueva cadena con el juego de caracteres definido de la siguiente manera: String val = new String (oo.getBytes ("UTF-8")); No puedo obtener los datos exactos como se esperaba.

Nota: He hecho referencia a la pregunta a continuación, pero no he podido resolver este problema: How to get UTF-8 working in Java webapps? Por favor guía.

ACTUALIZACIÓN: Llamar a la función de decodificación UTF-8 como se indica en el sitio W3.org http://www.w3.org/International/O-URL-code.html me está dando los resultados esperados. Espero que Tomcat decodifique esto ?.

Respuesta

7

Dado que está utilizando una consulta POST, URIEncoding="UTF-8" no es aplicable aquí. Debe configurar un filtro para decirle a Tomcat que su codificación de solicitud es UTF-8. Puede usar, por ejemplo, un Spring CharacterEncodingFilter (usage, javadoc). También se pueden encontrar otras implementaciones de tales filtros.

+0

Si esto funcionó - que tenía que asegurarse de que el filtro que había aplicado (SetCharacterEncodingFilter - que está disponible en la carpeta de ejemplos Tomcat) tenía que ser el primero, que es invocado antes de mis otros filtros y funcionó !. Gracias :) – Anna

+2

Aquí hay otro enlace de uso ya que el anterior parece roto: http://azizsaboor.wordpress.com/2008/06/10/spring-utf-8-conversion-using-characterencodingfilter/ –

1

Sí, aquí está uno:

package com.lfantastico.web; 

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 EncodingFilter implements Filter { 
    private String encoding = "UTF-8"; 

    public void destroy() { 
    } 

    public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws IOException, ServletException { 
     request.setCharacterEncoding(encoding); 
     response.setCharacterEncoding(encoding); 
     chain.doFilter(request, response); 
    } 

    public void init(FilterConfig config) throws ServletException { 
     if (config.getInitParameter("encoding") != null) { 
      encoding = config.getInitParameter("encoding"); 
     } 
    } 
} 
Cuestiones relacionadas