2011-09-27 33 views
6

Tôi có một chuỗi ở dạng này: =?utf-8?B?zr...Giải mã chủ đề email UTF-8?

Và tôi muốn lấy tên của tệp theo mã UTF-8 thích hợp. Có một phương pháp thư viện ở đâu đó trong trung tâm maven mà sẽ làm điều này giải mã cho tôi, hoặc tôi sẽ cần phải kiểm tra các mô hình và giải mã base64 bằng tay?

Trả lời

13

Trong thuật ngữ MIME, các đoạn mã được mã hóa này được gọi là các từ được mã hóa. Hãy xem javax.mail.internet.MimeUtility.decodeText trong JavaMail. Phương thức decodeText sẽ giải mã tất cả các từ được mã hóa trong một chuỗi.

Bạn có thể lấy nó từ maven với

<groupId>javax.mail</groupId> 
<artifactId>mail</artifactId> 
<version>1.4.4</version> 
+0

Tôi sẽ thêm rằng tôi có vấn đề này với một tên (tương tự như câu trả lời của toán học bên dưới) về phần MIME "Tệp đính kèm Nội dung-Bố cục; tên tệp =" tên tệp có "=? utf-8? B?" tiền tố là từ được mã hóa đặc biệt này. – Drizzt321

3
javax.mail.internet.MimeUtility.decodeWord() 

Mặt khác, nếu bạn sử dụng JavaMail để giải mã email của bạn, bạn không cần phải quan tâm đến một trong hai phân tích chủ đề hoặc MIME cơ thể (file đính kèm) phân tích ở tất cả.

BTW không cần phải là Base64 (chung với các khách hàng của Apple), nó cũng có thể được trích dẫn-có thể in (thông thường với ứng dụng khách MS Outlook).

Thunderbird sử dụng bất kỳ định dạng nào ngắn hơn (Base64 cho tiếng Nhật, QP cho hầu hết các ngôn ngữ châu Âu).

Nếu bạn thực sự muốn tự mình thực hiện, hãy xem RFC2047RFC2184 (bạn phải làm như vậy, có một vài sự tinh tế như mã hóa chia thành hai bộ ký tự khác nhau hoặc ghép các từ được mã hóa liền kề chỉ được phân tách bằng khoảng trắng gấp)

4

MimeUtility.decodeText đang làm việc cho tôi,

ví dụ:

MimeUtility.decodeText("=?UTF-8?B?4K6q4K+N4K6q4K+K4K604K6/4K614K+BIQ==?="); 
Các vấn đề liên quan