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