2013-03-04 10 views
5

Mam stronę internetową, która żąda hebrajskiego ciągu znaków za pomocą Ajax, ale ciąg jest zwracany jako "??????"Złe kodowanie przy zwracaniu ciągu znaków przy użyciu Spring MVC i ajax

Najdziwniejsze jest to, że podczas wkładania ten sam ciąg do strony za pomocą JSTL a nie Ajax, wykazano prawidłowo ...

W mojej stronie mam deklarując

<%@ page contentType="text/html" pageEncoding="UTF-8"%> 

to mój kontroler:

@RequestMapping("get_label") 
public @ResponseBody String getLabel() 
{ 
    String str = "בדיקה"; 

    return str; 
} 

A moja ajax request:

$.ajax({ 
    url: "get_label", 
    success: function(result) 
    { 
     alert(result); 
     $("#parameter_select label").text(result); 
    } 
}); 

Jakieś pomysły, co ja tu robię źle?

Odpowiedz

14

Dzieje się tak, ponieważ wywołania AJAX domyślnie używają domyślnego kodowania przeglądarki (np. ANSI). Nadrzędne to trzeba zrobić:

jQuery style - mimeType:

$.ajax({ 
    url: "get_label", 
    mimeType:"text/html; charset=UTF-8", 
    success: function(result) 
    { 
     alert(result); 
     $("#parameter_select label").text(result); 
    } 
}); 

Vanilla JS style:

xhr.overrideMimeType("text/html; charset=UTF-8") 

Ale z drugiej strony trzeba mieć pewność, że serwer również zwraca odpowiednią odpowiedź. Do tego trzeba by sprawdzić, co następuje:

  1. Dodaj UTF-8 dla strony pojemnika (tj Tomcat) z dodawaniem URIEncoding = "UTF-8" dla swojej Connector ustawienia server.xml; sprawdź numer this, aby uzyskać więcej informacji.
  2. Jeśli poprzednia zmiana nie pomogła (chociaż musi), upewnij się także, że zestaw znaków odpowiedzi serwletu jest również UTF-8.

W tym celu można użyć jawne wywołanie metody:

@RequestMapping("get_label") 
public @ResponseBody String getLabel(HttpServletResponse response) 
{ 
    String str = "בדיקה"; 

    //set encoding explicitly 
    response.setCharacterEncoding("UTF-8"); 

    return str; 
} 

lub, co wydaje się być bardziej korzystne dla @ResponseBody i wiosny 3.1 i nowsze:

@RequestMapping(value = "get_label", produces = "text/html; charset=UTF-8") 
public @ResponseBody String getLabel(HttpServletResponse response) 
{ 
    String str = "בדיקה"; 

    return str; 
} 

Podsumowując I chciałbym wyjaśnić, że do prawidłowej obsługi wywołań AJAX z kodowaniem UTF-8, musisz upewnić się, że:

  • web-pojemnik obsługuje kodowanie znaków tego właściwie
  • Response jest UTF-8
  • AJAX kodowania znaków jest również prośba UTF-8
+0

Nie działa ... Nadal się '????' – koela1

+0

Do celów testowych należy rozważyć wyczyszczenie pamięci podręcznej przeglądarki, ponieważ JS jest dobrze buforowany. – n1ckolas

+0

Jeśli to nie pomogło, to problem powinien być po stronie serwera. W takim przypadku proszę podać: 1) wersję wiosenną; 2) Twój kontener internetowy – n1ckolas

Powiązane problemy