【发布时间】:2011-07-23 13:23:15
【问题描述】:
Subject: Re:
=?UTF-8?Q?Th=E1=BA=A7y_g=E1=BB=ADi_b=C3=A0i_t=E1=BA=ADp_cho_em_v=E1=BB?=
=?UTF-8?Q?=9Bi.?=
我收到了一封包含此主题标题的电子邮件。应该如何解码?
【问题讨论】:
-
现代电子邮件客户端将透明地解码诸如此类的编码词。大多数电子邮件框架都有处理它们的机制。
Subject: Re:
=?UTF-8?Q?Th=E1=BA=A7y_g=E1=BB=ADi_b=C3=A0i_t=E1=BA=ADp_cho_em_v=E1=BB?=
=?UTF-8?Q?=9Bi.?=
我收到了一封包含此主题标题的电子邮件。应该如何解码?
【问题讨论】:
这是一个MIME encoded-word。语法为=?charset?transfer-encoding?encoded-data?=。传输编码为Base64 或Quoted-printable。
解码:
byte[]。在这种情况下,使用 Q 编码,因此将 =xx 序列替换为相应的八位字节。这为您提供了两个字节数组 [84, 104, 225, 186, 167, 121, 95, 103, 225, 187, 173, 105, 95, 98, 195, 160, 105, 95, 116, 225, 186, 173, 112, 95, 99, 104, 111, 95, 101, 109, 95, 118, 225, 187] 和 [155, 105, 46]。在这个特定示例中,两个编码字都是无效:第一个缺少 3 字节 UTF-8 字符的尾字节,第二个以尾开头字节。但是结合,它们是有效的 UTF-8,并解码为字符串 Thầy_gửi_bài_tập_cho_em_với.(谷歌翻译为“老师让我去锻炼”。)
【讨论】:
Each 'encoded-word' MUST represent an integral number of characters. A multi-octet character may not be split across adjacent 'encoded-word's.
这在 RFC 2047 中定义: https://www.rfc-editor.org/rfc/rfc2047
请参阅第 4 节关于编码的内容。我不确定基础框架中是否有任何东西可以正确处理/处理这个问题。
编辑:这是一个人的尝试:http://vsevolodp.blogspot.com/2010/11/how-to-decode-encoded-word-header.html
【讨论】: