2010-09-08 6 views
5

Ich bin eine einfache Ajax-Aufruf mit der YahooUI Javascript-Bibliothek zu tun wie folgt:UTF-8-Codierung und http-Parameter

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

Im Folgenden sind die Einstellungen in meiner App: Tomcat-Version: 6.0.18

Tomcat-Server-Anschluss: URIEncoding = "UTF-8" Webapp Seite:

angegeben auch in YahooUI Anschluss Bibliothek docs:

setForm kodiert jedes HTML-Formular Name und Wert des Feldes mit encodeURIComponent. Dies führt zu einer Zeichenfolge von UTF-8-codierten Namen-Wert- Paaren. HINWEIS: Wenn Sie einen HTTP-Header von "Inhaltstyp" mit einem anderen Zeichensatzwert setzen, wird die Codierung der serialisierten Datencodierung der serialisierten Daten nicht geändert.

I kann sehen, dass die französisch-Zeichen, die als Parameter codiert werden gesendet werden (in IE7 iehttpheader Tool):

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

Für die Daten: name: EAO und TestParam: Oo

Aber auf der Serverseite I-Werte wie folgt sehe: ÃÂàÃÂ

Auch wenn ich konv bin Setzen Sie die Zeichenfolge in Bytes und erstellen Sie dann eine neue Zeichenfolge, wobei der Zeichensatz wie folgt definiert ist: Zeichenfolge val = new Zeichenfolge (oo.getBytes ("UTF-8")); Ich bin nicht in der Lage, die genauen Daten wie erwartet zu erhalten.

Hinweis: Ich habe auf die folgende Frage verwiesen, konnte dieses Problem jedoch nicht beheben: How to get UTF-8 working in Java webapps? Bitte führen Sie.

UPDATE: Aufruf der decode UTF-8 Funktion als auf W3.org Website gegeben http://www.w3.org/International/O-URL-code.html ist mir die erwarteten Ergebnisse. Ich erwarte, dass Tomcat das entschlüsselt?

Antwort

7

Da Sie eine POST Abfrage verwenden, ist URIEncoding="UTF-8" hier nicht anwendbar. Sie müssen einen Filter einrichten, um Tomcat mitzuteilen, dass Ihre Anfragecodierung UTF-8 ist. Sie können zum Beispiel eine Spring CharacterEncodingFilter (usage, javadoc) verwenden. Andere Implementierungen solcher Filter können ebenfalls gefunden werden.

+0

Ja, das funktioniert - ich, dass der Filter, das, um sicherzustellen, hatte ich angewandt (SetCharacterEncodingFilter - die in tomcat Beispiele Ordner verfügbar ist) hatte die erste sein, die ist vor meinen anderen Filtern aufgerufen und es hat funktioniert !. Danke :) – Anna

+2

Hier ist ein weiterer Verwendungslink seit der oben genannten scheint kaputt: http://azizsaboor.wordpress.com/2008/06/10/spring-utf-8-conversion-using-characterencodingfilter/ –

1

Ja, hier ist eine:

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