2015-07-13 72 views
0

我使用這些技術來=?utf-8?B?...?=轉換成可讀的字符串:將電子郵件主題從「?UTF-8?...」轉換爲字符串?

How convert email subject from 「?UTF-8?…?=」 to readable string?

string encode/decode

它適用於簡單的輸入,但我有一些輸入已經嵌套=?utf-8?B?...?=,例如:

"=?utf-8?B?2KfbjNmGINuM2qkg2YXYqtmGINiz2KfYr9mHINin2LPYqg==?= =?utf-8?B?2KfbjNmGINuM2qkg2YXYqtmGINiz2KfYr9mHINin2LPYqg==?= =?utf-8?B?2YbYr9is?=" 

我知道=?UTF-8?B??=之間的部分是base64編碼的st環,但在這種情況下,我不知道如何提取它們。

+1

拆分輸入並單獨解析每個組件。 – dreamlax

回答

2

你可以使用正則表達式來提取=?UTF-8?B??=之間的字符串,然後轉換其餘的字符串。這裏有一個例子:

string input = "=?utf-8?B?2KfbjNmGINuM2qkg2YXYqtmGINiz2KfYr9mHINin2LPYqg==?= =?utf-8?B?2KfbjNmGINuM2qkg2YXYqtmGINiz2KfYr9mHINin2LPYqg==?= =?utf-8?B?2YbYr9is?="; 
Regex regex = new Regex(string.Format("{0}(.*?){1}",Regex.Escape("=?utf-8?B?"), Regex.Escape("?="))); 
var matches = regex.Matches(input); 
foreach (Match match in matches) 
{ 

    Console.WriteLine(
       Encoding.UTF8.GetString(Convert.FromBase64String(match.Groups[1].Value)) 
       ); 
} 

這將打印:

اینیکمتنسادهاست
اینیکمتنسادهاست
ندج

不要忘記這些使用包括聲明:

using System.Text.RegularExpressions; 
using System.Text; 

可用工作示例here

+0

哇!非常感謝 :) –

2

嘗試的東西,如:

string str = "=?utf-8?B?2KfbjNmGINuM2qkg2YXYqtmGINiz2KfYr9mHINin2LPYqg==?= =?utf-8?B?2KfbjNmGINuM2qkg2YXYqtmGINiz2KfYr9mHINin2LPYqg==?= =?utf-8?B?2YbYr9is?="; 

const string utf8b = "=?utf-8?B?"; 

var parts = str.Split(new[] { "?=" }, 0); 

foreach (var part in parts) 
{ 
    string str2 = part.Trim(); 

    if (str2.StartsWith(utf8b, StringComparison.OrdinalIgnoreCase)) 
    { 
     str2 = str2.Substring(utf8b.Length); 
     byte[] bytes = Convert.FromBase64String(str2); 
     string final = Encoding.UTF8.GetString(bytes); 
     Console.WriteLine(final); 
    } 
    else if (str2 == string.Empty) 
    { 
     // Nothing to do here 
    } 
    else 
    { 
     Console.WriteLine("Not recognized {0}", str2); 
    } 
} 

注意技術上rfc 1342是稍微複雜一點...而不是UTF-8,你可以有任何編碼,並代替B您能有Q(用於引用可打印)

相關問題