我正在從郵箱中拖拉法語電子郵件,並且電子郵件中包含重音符號。我相信它使用的是UTF8編碼。C#中的UTF8(引用可打印)轉換問題
我已經嘗試了不同的UTF8轉換方法,我在互聯網上發現,但一直不成功。
如何,例如,在C#中,我轉換這一點:蒙特婁= C3 = A9al到蒙特利爾?
編輯:此外,它是不一致的。有時它可能像Montr & eacute; al。 (&符號後面的空格只是添加的,所以瀏覽器不會將其轉換。)
Thanks! Mark
我正在從郵箱中拖拉法語電子郵件,並且電子郵件中包含重音符號。我相信它使用的是UTF8編碼。C#中的UTF8(引用可打印)轉換問題
我已經嘗試了不同的UTF8轉換方法,我在互聯網上發現,但一直不成功。
如何,例如,在C#中,我轉換這一點:蒙特婁= C3 = A9al到蒙特利爾?
編輯:此外,它是不一致的。有時它可能像Montr & eacute; al。 (&符號後面的空格只是添加的,所以瀏覽器不會將其轉換。)
Thanks! Mark
這不是UTF-8。這是quoted printable,它與UTF-8編碼不同,它更像是「ASCII文本到Unicode文本」編碼。
Quoted printable將有效地允許您將ASCII消息轉換爲一個字節數組,它可以將然後解碼爲UTF-8。
我不知道是否有.NET中的引用可打印的編碼,這是有點怪異......我可能已經錯過了任何東西直接支持。
的UTF-8編碼轉換字節(8位數字)的陣列以一個字符串(或反之亦然)。即有「數字」和「字符」之間的映射。該字符集大於ASCII字符集,例如é是UTF-8的一部分,但不是ASCII的一部分。
引用-Prinable編碼轉換字節(8位數)的ASCII字符的序列(實際上它的一個子集)的陣列。
因此,兩個可以「編碼」一UTF-8字符串組合成的ASCII字符(的一個子集)(ASCII字符串)的序列。
使用其他編碼(例如ISO-8859-1)也可以做到這一點。因此,你需要有兩個信息:
解碼引用可打印因此具有兩個步驟:
創建字節數組說字節[]通過引用的可打印的規則,即
然後將字節數組解釋爲UTF-8字符串。
我不這麼認爲。當我從QP轉換時,得到: Montréal。 它將每個= C3和= A9作爲一個獨立的實體。但是,他們需要一起解釋才能獲得é。 – user390480 2010-07-20 13:33:09
@ user390480:這表明你沒有正確轉換QP。您需要從QP轉換爲二進制,然後*然後*使用UTF-8編碼將該二進制文件解碼爲文本。 – 2010-07-20 14:12:53
@JonSkeet,我有同樣的問題[這裏](http://stackoverflow.com/q/32083334/7850)。你有可能發佈如何從QP轉換的代碼示例嗎?謝謝! – 2015-08-18 22:38:11