2013-06-13 29 views
6

Đây có thể là câu hỏi ngớ ngẩn nhưng ... ở đây!Tiêu đề được mã hóa Mime có thêm '=' (==? Utf-8? B? Base64string? =)

Tôi đã viết trình phân tích cú pháp MIME của riêng mình trong C++ gốc. Đó là một cơn ác mộng với các bảng mã! Nó ổn định trong 3 tháng qua, nhưng gần đây tôi nhận thấy điều này Subject: header.

Subject: =?UTF-8?B?T2ZpY2luYSBkZSBJbmZvcm1hY2nDs24sIEluaWNpYXRpdmFzIHkgUmVjbGFt?===?UTF-8?B?YWNpb25lcw==?= 

mà nên giải mã như thế này:

Subject: Oficina de Información, Iniciativas y Reclamaciones 

Vấn đề là có thêm một = (equal) trong đó mà tôi không thể tìm ra ràng buộc hai (tại sao 2?) yếu tố mã hóa mà Tôi không hiểu tại sao được tách ra. Về lý thuyết, định dạng phải là: =?charset?encoding?encoded_string?= nhưng tìm thấy một chủ đề khác bắt đầu bằng hai số =.

==?UTF-8?B?blahblahlblah?= 

Tôi nên xử lý thêm = như thế nào?

tôi có thể thay thế ==? với =?(mà tôi) trước khi làm bất cứ điều gì (và nó hoạt động) ... nhưng tôi đang tự hỏi nếu có bất kỳ loại spec về vấn đề này vì vậy tôi không hack theo cách của tôi vào chức năng thích hợp.

PS: Tôi ghét các giao thức di tích này đến mức nào! Tất cả các liên lạc văn bản phải là UTF-8 và XML :)

Trả lời

2

Trong các từ được mã hóa MIME tiêu đề được sử dụng (RFC 2047 Phần 2.).

... (tại sao 2?)

Để khắc phục 75 giới hạn từ mã hóa, mà là có vì 78 dòng dài hạn (hoặc sử dụng 2 mã hóa khác nhau như Trung Quốc và Ba Lan ví dụ) .

RFC 2047:

Một 'mã hóa-word' có thể không dài hơn 75 ký tự, bao gồm 'charset', 'mã hóa', 'mã hóa-văn bản, và dấu phân cách. Nếu muốn mã hóa nhiều văn bản hơn so với từ 'được mã hóa' của 75 ký tự, có thể sử dụng nhiều 'mã được mã hóa' (được phân tách bằng CRLF SPACE).

Dưới đây là các ví dụ từ RFC2047 (lưu ý không có '=' ở giữa):

Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?= 
    =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?= 

chủ đề của bạn nên được giải mã như:

"Oficina de Información, Iniciativas y Reclam=aciones" 

mraq Câu trả lời là không chính xác . Ngắt dòng mềm chỉ áp dụng cho 'Nội dung chuyển mã hóa có thể in được' có thể in được, có thể được sử dụng trong phần thân MIME.

0

Từ những gì tôi có thể nhìn thấy trong các dấu hiệu bằng nhau MIME RFC là không hợp lệ (để mã hóa), nhưng hãy nhớ rằng bạn có thể hiểu dấu bằng đầu tiên và sau đó sử dụng các công cụ sau để giải mã. Nhưng nghiêm túc, những dấu hiệu bình đẳng thêm trông giống như hiện vật, có thể từ một bộ mã hóa không chính xác.

+0

Tôi cũng nghĩ vậy. Tôi đã nhìn thấy chúng trên 5 email từ các nguồn khác nhau và nghĩ rằng đó là một cái gì đó tôi đã mất tích. Và những gì tốt hơn nơi để hỏi hơn SO): – CodeAngry

0

Nó được gọi là "ngắt dòng mềm" và đó là di sản của giao thức SMTP.

Trích dẫn trang 20 của RFC2045

(ngắt dòng Soft) Mã hóa Quoted-in YÊU CẦU rằng dòng mã hóa không quá 76 ký tự. Nếu các dòng dài hơn cần được mã hóa với mã hóa được trích dẫn có thể in, ngắt dòng "mềm" phải được sử dụng. Dấu bằng như ký tự cuối cùng trên dòng được mã hóa cho biết dấu ngắt dòng không có ý nghĩa ("mềm") trong văn bản được mã hóa.

Và cũng Wikipedia on Quoted-printable

Một ngắt dòng mềm bao gồm một dấu "=" ở phần cuối của một dòng mã hóa, và không xuất hiện như một ngắt dòng trong văn bản giải mã.

+2

Câu trả lời này là không chính xác. Nó là khó hiểu 'Trích dẫn nội dung có thể in' mã hóa (RFC 2045) với các từ được mã hóa 'Được mã hóa Q' (RFC 2047). Chủ đề trên cần được giải mã là "Oficina de Información, Iniciativas y Reclam = aciones" –

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