2010-09-08 16 views
5

robie prosty wywołanie ajax z biblioteką YahooUI Javascript następująco:kodowanie UTF-8 i HTTP parametry

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

są następujące ustawienia w moim app: Tomcat wersja: 6.0.18

złącze serwer Tomcat: URIEncoding = "UTF-8" strona webapp:

stwierdzono także w YahooUI docs bibliotecznych złącze:

setForm zakoduje każdą nazwę pola HTML o nazwie i wartości pola przy użyciu encodeURIComponent. W rezultacie powstaje ciąg znaków kodowanych w UTF-8 o wartości nazwy . UWAGA: Ustawienie nagłówka HTTP z "Content-Type" z inną wartością znaków zestawu znaków nie zmieni kodowania danych serialized.encoding zserializowanych danych.

widzę, że francuskie znaki, które są wysyłane jako parametry są kodowane (w IE7 korzystając iehttpheader narzędzie):

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

Dla danych: nazwę: EAO i testParam: OO

Ale po stronie serwera widzę wartości w następujący sposób: ÃÂàÃÂ

Nawet jeśli jestem conv erting string do bajtów, a następnie utwórz nowy ciąg znaków z zestawem znaków zdefiniowanym w następujący sposób: String val = new String (oo.getBytes ("UTF-8")); Nie mogę uzyskać dokładnych danych zgodnie z oczekiwaniami.

Uwaga: odniosłem się do pytania poniżej, ale nie udało się rozwiązać tego problemu: How to get UTF-8 working in Java webapps? Proszę wskazać.

UPDATE: Wywołanie dekodowania UTF-8 funkcji, jak podano na stronie w3.org http://www.w3.org/International/O-URL-code.html daje mi oczekiwanych rezultatów. Oczekuję, że Tomcat to rozszyfruje ?.

Odpowiedz

7

Ponieważ używasz zapytania POST, tutaj nie ma zastosowania URIEncoding="UTF-8". Musisz ustawić filtr, aby powiedzieć Tomcat, że kodowanie twojego żądania to UTF-8. Możesz użyć, na przykład, Springa CharacterEncodingFilter (usage, javadoc). Można również znaleźć inne implementacje takich filtrów.

+0

Tak to działało - musiałem upewnić się, że filtr który ja stosuje (SetCharacterEncodingFilter - który jest dostępny w folderze przykładów tomcat) musiał być pierwszy, który jest Wywołany przed innymi filtrami i zadziałał !. Dzięki :) – Anna

+2

Oto inny link użytkowania, ponieważ powyższy wydaje się zepsuty: http://azizsaboor.wordpress.com/2008/06/10/spring-utf-8-conversion-using-characterencodingfilter/ –

1

Tak, tutaj jest jeden:

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"); 
     } 
    } 
}