2009-12-04 25 views
14

Tôi có một API trả về XML, nó thực sự trả về nó bằng cách sử dụng mã hóa mặc định (tôi tin là UTF-8), nhưng bây giờ các yêu cầu đã thay đổi và chúng ta cần trả về mọi thứ trong UTF-16LE.Thay đổi mã hóa của HttpServletResponse

Câu hỏi của tôi là: có cách dễ dàng để thực hiện việc này không? Tôi có quyền truy cập vào phản hồi ngay trước khi các cuộc gọi hoàn tất vì vậy tôi đã tự hỏi nếu tôi có thể làm điều gì đó như

//This method does not exist 
response.setCharacterEncoding("UTF-16LE"); 

Cảm ơn rất nhiều!

CẬP NHẬT: Phương pháp được đề cập là phương pháp được sử dụng. Tôi đã sử dụng một phiên bản cũ (2.3) của API servlet không bao gồm nó. Thay đổi phiên bản đã sửa tất cả.

Trả lời

19

Uhh, phương pháp không tồn tại, here

Thiết lập mã hóa ký tự (MIME charset) của phản ứng được gửi đến khách hàng, ví dụ, để UTF-8. Nếu , mã hóa ký tự đã là được đặt bởi setContentType (java.lang.String) hoặc setLocale (java.util.Locale), phương thức này sẽ ghi đè. Gọi số setContentType (java.lang.String) bằng Chuỗi văn bản/html và gọi phương thức này với chuỗi UTF-8 tương đương với việc gọi setContentType bằng chuỗi văn bản/html; charset = UTF-8.

+2

đồi khế, đồi được giới thiệu trong Servlet API 2.4. Mặc dù đây là hơn 5 tuổi và ngày nay tất cả mọi người nên đã có ít nhất là phiên bản đó, bạn cần phải đảm bảo rằng bạn đang sử dụng nó là tốt. – BalusC

+0

điểm tốt, cũng được thực hiện – skaffman

+2

Nó có thể đáng chú ý ở đây là mã hóa mặc định là ISO-8859-1. –

8

Đầu tiên

response.setHeader("Content-Type", "text/xml; charset=UTF-16LE"); 

Sau đó, hãy chắc chắn rằng bạn đang thực sự phát ra mã hóa đó!

10

Như những người khác đã nói, sử dụng một trong hai:

response.setCharacterEncoding("UTF-16LE"); 

hay:

response.setHeader("Content-Type", "text/xml; charset=UTF-16LE"); 

... nhưng chắc chắn rằng bạn làm điều này trước khi gọi response.getWriter(); ...!

+3

Cảm ơn, Tim, gọi nó sau 'response.getWriter()' là những gì gây ra cho chúng tôi vấn đề! –

+0

Nhận xét về việc gọi nó trước 'response.getWriter()' phải là một câu trả lời trong và của chính nó. – Ickster

0

chỉ làm những điều sau đây:

byte[] k =xml.getBytes("UTF-16"); // xml is the string with unicode content. getBytes("UTF-16") encodes given String into a sequence of bytes and returns an array of bytes. you can use xml.getBytes(UTF8_CHARSET); for utf-8 encoding 

response.setContentType("text/xml"); 
response.setContentLength(k.length); 
response.getOutputStream().write(k); 
response.getOutputStream().flush(); 
response.getOutputStream().close(); 
Các vấn đề liên quan