36
这是一个例子原始邮件我试图解析:在MIME编码的带引号的可打印文本中,“= C2 = A0”是什么?
MIME-version: 1.0
Content-type: text/html; charset=UTF-8
Content-transfer-encoding: quoted-printable
X-Mailer: Verizon Webmail
X-Originating-IP: [x.x.x.x]
=C2=A0test testing testing 123
什么是= C2 = A0?我已经尝试了六打引用可打印的解析器,但没有正确处理这个问题。 如何正确解析这在C#中?
老实说,现在,我编码:
//TODO WTF
encoded = encoded.Replace("=C2=A0", "");
因为我想不通,为什么该文本是有内部的MIME内容随意,不应该被渲染成什么。通过删除它,我得到了预期的效果 - 但为什么?!
要清楚,我知道(= [0-9A-F] {2})是一个编码字符。但在这种情况下,它似乎代表什么。
解析C#中的这种方法是什么?我试过的所有解析器都对每个字符独立进行操作,并执行以下操作:int iHex = Convert.ToInt32(hex,16); char c =(char)iHex; – TheSoftwareJedi 2010-05-05 15:31:33
是否UTF-8总是以这样的2个字节编码?我可以假设(= [0-9A-F] {2} = [0-9A-F] {2})而不是单个字节的匹配吗?为什么地狱不在这里解析器?!?!?!?! – TheSoftwareJedi 2010-05-05 15:35:23
如果您阅读了UTF-8,您会发现任何超过7F的单字节值都必须编码为两个字符,并且第一个字符总是会设置为高位。所以,是的,A0总是被编码为C2 A0,这意味着你不能逐字节。用引号编码处理UTF-8的正确方法是首先解码引用的部分,然后解码UTF-8,从而生成由2字节字符(技术上为UCS-16或UTF-16)组成的字符串。 – 2010-05-05 15:52:46