2010-09-08 15 views
5
şöyle ben YahooUI JavaScript kütüphanesi ile basit bir ajax arama yapıyorum

:UTF-8 kodlaması ve http parametreleri

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

Aşağıdakiler benim app ayarları: Tomcat sürümü: 6.0.18

Tomcat sunucusu konektörü: URIEncoding = "UTF-8" webapp sayfa: Ayrıca YahooUI konnektör kütüphane docs belirtilen

:

setForm her bir HTML formunu alanın adını ve değerini encodeURIComponent kullanarak kodlayacaktır. Bu, dizgisi UTF-8 kodlu, ad değeri çiftleri ile sonuçlanır. NOT: "Content-Type" HTTP üstbilgisini farklı bir charset değeriyle ayarlamak, serileştirilmiş verilerin serileştirilmiş data.encoding'inin kodlamasını değiştirmez.

Ben parametre olarak gönderiliyor fransız karakterler (aletini iehttpheader kullanarak ie7 cinsinden) kodlanmış olduğunu görebilirsiniz: veriler için

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

: adı: EAO ve testParam:

oo

Fakat sunucu tarafında aşağıdaki gibi değerleri görüyorum: ÃÂàワã

Ben dönüşüm olsam bile dizeyi byte'lara yönlendirmek ve sonra aşağıdaki gibi tanımlanan karakter kümesiyle yeni dize oluşturmak: String val = new Dize (oo.getBytes ("UTF-8")); Tam verileri beklendiği gibi alamıyorum.

Not: Aşağıdaki soruya referansta bulunulmuştur, ancak bu sorunu çözemedik: How to get UTF-8 working in Java webapps? Lütfen yönlendirin.

GÜNCELLEME: Bana beklenen sonuçlar veriyor W3.org sitesinde http://www.w3.org/International/O-URL-code.html üzerinde verildiği gibi kod çözme UTF-8 fonksiyonu çağrılıyor. Tomcat'ın bunu çözmesini bekliyorum.

cevap

7

POST sorgusunu kullandığınızdan, URIEncoding="UTF-8" burada uygulanmaz. Tomcat’a, istek kodlamanızın UTF-8 olduğunu bildiren bir filtre ayarlamanız gerekir. Örneğin, bir Spring'in CharacterEncodingFilter'unu (usage, javadoc) kullanabilirsiniz. Bu filtrelerin diğer uygulamaları da bulunabilir.

+0

Evet bu çalıştı - Ben başvurduğunu filtre hangi sağlamak zorunda (SetCharacterEncodingFilter - tomcat örnekler klasöründe kullanılabilir) 'dir ilki olmak zorunda diğer filtrelerimden önce çağrıldı ve işe yaradı! Teşekkürler :) – Anna

+2

Yukarıdaki yukarıdaki kırık gibi görünüyor başka bir kullanım bağlantısı: http://azizsaboor.wordpress.com/2008/06/10/spring-utf-8-conversion-using-characterencodingfilter/ –

1

Evet, burada biridir:

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