将电子邮件主题从“?UTF-8?...”转换为字符串?
Converting email subject from "?UTF-8?..." to string?
我正在使用这些技术将 =?utf-8?B?...?=
转换为可读字符串:
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 编码的字符串,但在这种情况下我不知道如何提取它们。
您可以使用正则表达式提取 =?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 语句:
using System.Text.RegularExpressions;
using System.Text;
可用的工作示例 here。
试试类似的东西:
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,而您可以使用 Q(用于引用可打印)代替 B
我正在使用这些技术将 =?utf-8?B?...?=
转换为可读字符串:
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 编码的字符串,但在这种情况下我不知道如何提取它们。
您可以使用正则表达式提取 =?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 语句:
using System.Text.RegularExpressions;
using System.Text;
可用的工作示例 here。
试试类似的东西:
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,而您可以使用 Q(用于引用可打印)代替 B