2010-01-02 24 views
43

mã servlet của tôi trông như thế:làm thế nào để gửi thông qua nhân vật ServletOutputStream trong mã UTF-8

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

...

sau đó tôi nhận được lỗi:

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) 

thế nào có thể Tôi chuyển đổi bộ mã nguồn của dòng đầu ra của Servlet ???

Trả lời

78

Tôi nghĩ bạn muốn sử dụng getWriter() để thay thế. Điều đó sẽ chấp nhận một chuỗi và mã hóa nó, trong khi luồng đầu ra là để xử lý dữ liệu nhị phân.

Từ doc:

Returns a PrintWriter object that can send character text to the client. The character encoding used is the one specified in the charset= property of the setContentType(java.lang.String) method, which must be called before calling this method for the charset to take effect.

Either this method or getOutputStream() may be called to write the body, not both.

Đây là sự thay đổi của mã:

response.setContentType("text/html; charset=UTF-8"); 
response.setCharacterEncoding("UTF-8"); 
PrintWrite out = response.getWriter(); 
out.println(...MY-UTF-8 CODE...); 
+1

Thử nó - Nó làm việc! Mất ít hơn 5 phút. để giải quyết nó. Tôi sẽ cố gắng tìm câu hỏi khó hơn vào lần sau ... – GyRo

+9

Không. Không :-) –

+0

+1 - công việc tuyệt vời. – duffymo

3

Trường hợp tương tự xảy ra với tôi trước và tôi đã cố gắng để add-on một dòng trên đầu trang của PrintWriter và nó là công việc.

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

7

này cũng hoạt động:

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

cũng làm việc cho tôi, nhưng tại sao nó hoạt động với 'write' nhưng không phải với' print'/'println'? – moeTi

+0

@moeTi Điều này cũng kỳ lạ đối với tôi. Bất kỳ lời giải thích? – Zouzias

0
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(); 
} 
Các vấn đề liên quan