2010-09-08 31 views
5

Tôi đang làm một cuộc gọi ajax đơn giản với thư viện YahooUI javascript như sau:mã UTF-8 và http thông số

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

Sau đây là các thiết lập trong ứng dụng của tôi: Tomcat phiên bản: 6.0.18

nối máy chủ Tomcat: URIEncoding = "UTF-8" trang webapp:

Cũng nêu tại YahooUI tài liệu thư viện kết nối:

setForm sẽ mã hóa từng dạng HTML tên và giá trị của trường bằng cách sử dụng encodeURIComponent. Điều này dẫn đến một chuỗi mã hóa UTF-8, tên-giá trị cặp. LƯU Ý: Đặt tiêu đề HTTP là "Loại nội dung" với giá trị ký tự khác nhau sẽ không thay đổi mã hóa của dữ liệu được tuần tự hóa.

Tôi có thể thấy rằng các nhân vật Pháp đang được gửi như thông số được mã hóa (trong IE7 sử dụng iehttpheader công cụ):

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

Đối với các dữ liệu: tên: Èàô và testParam: oo

Nhưng ở phía máy chủ tôi nhìn thấy các giá trị như sau: ÃÂàÃÂ

Thậm chí nếu tôi conv erting chuỗi thành byte và sau đó tạo chuỗi mới với bộ ký tự được xác định như sau: Chuỗi val = new String (oo.getBytes ("UTF-8")); Tôi không thể nhận được dữ liệu chính xác như mong đợi.

Lưu ý: Tôi đã tham chiếu câu hỏi bên dưới, nhưng không thể giải quyết vấn đề này: How to get UTF-8 working in Java webapps? Vui lòng hướng dẫn.

CẬP NHẬT: Gọi hàm giải mã UTF-8 như được đưa ra trên trang W3.org http://www.w3.org/International/O-URL-code.html mang lại cho tôi kết quả mong đợi. Tôi hy vọng Tomcat sẽ giải mã cái này ?.

Trả lời

7

Vì bạn đang sử dụng truy vấn POST, URIEncoding="UTF-8" không áp dụng tại đây. Bạn cần đặt bộ lọc để thông báo cho Tomcat rằng mã hóa yêu cầu của bạn là UTF-8. Bạn có thể sử dụng, ví dụ: một số của mùa xuân là CharacterEncodingFilter (usage, javadoc). Các cài đặt khác của các bộ lọc này cũng có thể được tìm thấy.

+0

Có điều này làm việc - tôi phải đảm bảo rằng các bộ lọc mà tôi đã áp dụng (SetCharacterEncodingFilter - trong đó có sẵn trong thư mục ví dụ tomcat) phải là người đầu tiên đó là được gọi trước các bộ lọc khác của tôi và nó hoạt động !. Cảm ơn :) – Anna

+2

Đây là một liên kết sử dụng khác vì liên kết trên dường như bị hỏng: http://azizsaboor.wordpress.com/2008/06/10/spring-utf-8-conversion-using-characterencodingfilter/ –

1

Vâng, đây là một trong:

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"); 
     } 
    } 
} 
Các vấn đề liên quan