wake-up-neo.net

so senden Sie ServletOutputStream-Zeichen in UTF-8-Kodierung

Mein Servlet-Code sieht so aus:

response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
ServletOutputStream out = response.getOutputStream();
out.println(...MY-UTF-8 CODE...);

...

dann bekomme ich den fehler:

Java.io.CharConversionException: Not an ISO 8859-1 character: ש
 javax.servlet.ServletOutputStream.print(ServletOutputStream.Java:89)
 javax.servlet.ServletOutputStream.println(ServletOutputStream.Java:242)
 rtm.servlets.CampaignLogicServlet.doPost(CampaignLogicServlet.Java:68)
 javax.servlet.http.HttpServlet.service(HttpServlet.Java:637)
 javax.servlet.http.HttpServlet.service(HttpServlet.Java:717)

Wie kann ich den Zeichensatz des Servlet-Ausgangsstroms wechseln?

47
GyRo

Ich denke, Sie möchten stattdessen getWriter () verwenden. Das akzeptiert einen String und codiert ihn, während der Ausgabestrom für die Verarbeitung von binary - Daten dient.

Aus dem Dokument:

Gibt ein PrintWriter-Objekt zurück, das Senden Sie den Zeichentext an den Client. Das Die verwendete Zeichencodierung ist die in der Eigenschaft charset = von .__ angegeben. der setContentType (Java.lang.String) Methode, die vor .__ aufgerufen werden muss. Aufruf dieser Methode für den Zeichensatz nach wirksam werden.

Entweder diese Methode oder getOutputStream () kann zu .__ aufgerufen werden. schreibe den Körper, nicht beide.

Hier ist die Änderung des Codes:

response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println(...MY-UTF-8 CODE...);
88
Brian Agnew

Das funktioniert auch:

ServletOutputStream out = response.getOutputStream();
out.write("MY-UTF-8 CODE".getBytes("UTF-8")); 
8
quagmired

Der gleiche Fall ist mir schon vorher passiert und ich habe versucht, eine Zeile über den PrintWriter hinzuzufügen, und es ist Arbeit. 

response.setContentType ("text/html; charset = GBK"); 
PrintWriter out = response.getWriter ();

3
Chang
public void output(String jsonStr, HttpServletResponse response) throws IOException {
    response.setContentType("text/html;charset=UTF-8;");
    response.setCharacterEncoding("UTF-8");
    ServletOutputStream out = response.getOutputStream();
    out.write(jsonStr.getBytes("UTF-8"));
    out.flush();
    out.close();
}
0
Allen