2012-04-04 29 views
26

Tôi không thể tự tìm thấy câu trả lời. Có cách nào để nói với jackson để sử dụng mã hóa UTF-8 khi sử dụng ObjectMapper để serialize và deserialize đối tượng?Jackson ObjectMapper với mã hóa UTF-8?

Cảm ơn

Trả lời

39

Jackson tự động phát hiện mã hóa được sử dụng trong nguồn: theo đặc điểm kỹ thuật JSON, mã hóa chỉ có giá trị là UTF-8, UTF-16 và UTF-32. Không có mã hóa nào khác (như Latin-1) có thể được sử dụng. Do đó, tính năng phát hiện tự động dễ dàng và được thực hiện bởi trình phân tích cú pháp - không có phát hiện mã hóa nào được chấp nhận vì lý do này. Vì vậy, nếu đầu vào là UTF-8, nó sẽ được phát hiện như vậy.

Đối với đầu ra, UTF-8 là mặc định; nhưng nếu bạn muốn sử dụng mã hóa khác một cách rõ ràng, bạn có thể tạo JsonGenerator một cách rõ ràng (với phương thức mất JsonEncoding) và chuyển số này đến ObjectMapper.

Hoặc trong cả hai trường hợp, tất nhiên bạn có thể xây dựng thủ công java.io.Reader/java.io.Writer và sử dụng bất kỳ mã hóa nào bạn muốn.

+1

Tôi không chắc chắn UTF-8 có thể là mặc định như thế nào, khi tôi đã bỏ ra hàng giờ cố gắng để JSON được mã hóa bằng UTF-8 thay vì UTF-16. – cbmanica

+3

@cbmanica Hãy tin tôi, UTF-8 là mặc định tuyệt đối cho Jackson khi bạn đưa ra 'java.io.OutputStream'. Nhưng có các giá trị mặc định khác: JDK có mã hóa mặc định của nó nếu bạn chọn xây dựng cá thể 'Writer', hoặc một số khung công tác/lib khác thực hiện nó. Chúng nằm ngoài Jackson. – StaxMan

+0

@cbmanica Bạn có thể, vui lòng chia sẻ mã của bạn đã giúp bạn không? Có vẻ như tôi có cùng một vấn đề. – Tregoreg

Các vấn đề liên quan