2013-03-04 2 views
5

Ho una pagina Web che richiede una stringa ebraica utilizzando Ajax ma la stringa viene restituita come '??????'Codifica errata quando si restituisce una stringa utilizzando Spring MVC & ajax

La cosa strana è che quando si inserisce la stessa stringa per la pagina utilizzando JSTL e non Ajax, viene mostrato correttamente ...

Nella mia pagina web che sto dichiarando

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

Ecco il mio controller:

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

    return str; 
} 

E la mia richiesta ajax:

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

Qualche idea di cosa sto sbagliando qui?

risposta

14

Ciò accade perché le chiamate AJAX utilizzano per impostazione predefinita la codifica predefinita del browser (ad esempio ANSI). Per l'override questo è necessario fare:

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

Ma da altra parte è necessario essere sicuri, quel server restituisce anche una risposta appropriata. Per questo è necessario verificare quanto segue:

  1. Aggiungere supporto UTF-8 per il web-contenitore (ad esempio Tomcat), con l'aggiunta di URIEncoding = "UTF-8" per il vostro connettore impostazioni server.xml; controllare this per ulteriori informazioni.
  2. Se la modifica precedente non ha aiutato (anche se è necessario), assicurarsi anche che il set di caratteri della risposta di servlet sia anche UTF-8.

Per questo è possibile utilizzare una chiamata esplicita del metodo:

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

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

    return str; 
} 

Or, che sembra essere più preferibile per @ResponseBody e Spring 3.1+:

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

    return str; 
} 

In conclusione mi vorrei chiarire che, per una corretta gestione delle chiamate AJAX con codifica UTF-8, è necessario assicurarsi che:

  • web-container supporta la codifica dei caratteri correttamente questo
  • di risposta è UTF-8
  • AJAX codifica richiesta di carattere è anche UTF-8
+0

Non funziona ... Ancora ottenere '????' – koela1

+0

Per scopi di test, considerare la cancellazione delle cache del browser poiché JS è memorizzato nella cache piuttosto bene. – n1ckolas

+0

Se non è stato utile, il problema dovrebbe essere sul lato server. In questo caso, si prega di fornire: 1) la versione della molla; 2) il tuo web-container – n1ckolas