2009-08-19 7 views
1

Je dois retourner une lettre latine spéciale (par exemple á) dans la réponse d'une méthode de portlet serveResource(). J'ai essayé les façons suivantes:ResourceResponse.setCharacterEncoding() ne fonctionne pas

response.setCharacterEncoding("ISO-8859-1") ; 
PrintWriter out = resWrapper.getWriter(); 
out.println("á"); 
out.close(); 

OU

response.setContentType("text/plain; charset=ISO-8859-1"); 
PrintWriter out = resWrapper.getWriter(); 
out.println("á"); 
out.close(); 

L'appel XHR d'extrémité avant (à l'url serveResource) ne reçoit pas le caractère correct de retour de ces deux approches ci-dessus. Cependant, si le XHR envoie la requête à un HttpServlet (avec exactement les mêmes codes de réponse ci-dessus), cela fonctionne très bien.

Quelqu'un peut-il faire la lumière sur le problème ici?

Répondre

1

Est-il possible que le navigateur interprète la réponse de l'appel serveResource() en fonction du jeu de caractères spécifié sur la page contenant le portlet au lieu de ce que vous avez l'intention de faire? Peut-être que vous récupérez le caractère correct, mais lorsque le navigateur le rend, il ne tient pas compte de ce que vous avez défini dans la méthode serveResource() et l'affiche avec le même jeu de caractères que le reste de la page.

Cela peut expliquer pourquoi cela fonctionne correctement avec un HttpServlet, qui a la responsabilité de rendre la page entière, pas seulement une partie de celle-ci. Et donc, en définissant le codage de caractères sur la réponse scelle l'affaire dans ce cas.

0

Je voudrais:

  • Enregistrer la sortie résultante sur le disque et faire un vidage hexadécimal; la valeur de U + 00e1 (& # x00e1;) codée comme ISO-8859-1 doit être E1. Si tel est le cas, il y a un problème avec la façon dont les données sont interprétées sur le client (vérifiez le HTTP headers). Si ce n'est pas le cas, il y a un problème avec la façon dont les données sont codées (encodées en UTF-8, le caractère devient les octets C3 A1). Essayez le changement de sortie en out.println(\u00E1");. Si cela fonctionne, le problème est de savoir comment le compilateur charge et interprète la source Java. C'est peu probable étant donné que le servlet fonctionne.