2009-08-19 12 views
1

Ich muss einige spezielle lateinische Buchstaben (z. B. á) in der Antwort eines Portlet serveResource() Methode zurückgeben. Ich habe die folgende Art und Weise versucht:ResourceResponse.setCharacterEncoding() funktioniert nicht

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

ODER

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

Der vordere Anrufendsignal XHR (zum serveResource url) nicht das richtige Zeichen wieder aus beiden Ansätzen oben. Wenn das XHR die Anforderung jedoch an ein HttpServlet (mit den gleichen obigen Antwortcodes) sendet, funktioniert es einwandfrei.

Kann jemand bitte hier etwas Licht auf das Problem werfen?

Antwort

1

Ist es möglich, dass der Browser die Antwort des Aufrufs serveResource() entsprechend dem Zeichensatz interpretiert, der auf der Seite angegeben ist, die das Portlet enthält, statt wie vorgesehen? Vielleicht erhalten Sie das richtige Zeichen zurück, aber wenn der Browser es rendert, ignoriert es, was Sie in der Methode serveResource() festlegen, und zeigt es mit dem gleichen Zeichensatz wie der Rest der Seite an.

Das könnte erklären, warum es gut mit einem HttpServlet funktioniert, das verantwortlich für das Rendern der ganzen Seite ist, nicht nur ein Stück davon. Wenn Sie also die Zeichencodierung für die Antwort festlegen, wird das Geschäft in diesem Fall abgeschlossen.

0

Ich würde:

  • Speichern Sie die resultierende Ausgabe auf der Festplatte und ein Hex-Dump tun; Der Wert von U + 00e1 (& # x00e1;), codiert als ISO-8859-1, sollte E1 sein. Wenn dies der Fall ist, stimmt etwas nicht damit, wie die Daten auf dem Client interpretiert werden (siehe HTTP headers). Wenn dies nicht der Fall ist, gibt es ein Problem mit der Codierung der Daten (kodiert als UTF-8, das Zeichen wird zu den Bytes C3 A1).
  • Versuchen Sie, den Ausgang auf out.println(\u00E1"); zu ändern. Wenn dies funktioniert, besteht das Problem darin, wie der Compiler die Java-Quelle lädt und interpretiert. Dies ist unwahrscheinlich, da das Servlet funktioniert.