Feed Burner 更改了他们的博客服务返回结果,它返回类似于以下内容的 JavaScript 块:
文档.write("\x3cdiv
类\x3d\x22feedburnerFeedBlock\x22
id\x3d\x22RitterInsuranceMarketingRSSv3iugf6igask14fl8ok645b6l0\x22\x3e");
document.write("\x3cul\x3e");
文档.write("\x3cli\x3e\x3cspan
类\x3d\x22标题\x22\x3e\x3ca
href\x3d\x22
我想要原始的 html。以前,我可以轻松地使用 .Replace 来删除 document.write 语法,但我无法弄清楚这是什么类型的编码,或者至少无法弄清楚如何使用 C# 对其进行解码。
Edit:好吧,这是一个最终要解决的半噩梦,这就是我想出的方案,以防有人可以提供任何改进
public static char ConvertHexToASCII(this string hex)
{
if (hex == null) throw new ArgumentNullException(hex);
return (char)Convert.ToByte(hex, 16);
}
.
private string DecodeFeedburnerHtml(string html)
{
var builder = new StringBuilder(html.Length);
var stack = new Stack<char>(4);
foreach (var chr in html)
{
switch (chr)
{
case '\\':
if (stack.Count == 0)
{
stack.Push(chr);
}
else
{
stack.Clear();
builder.Append(chr);
}
break;
case 'x':
if (stack.Count == 1)
{
stack.Push(chr);
}
else
{
stack.Clear();
builder.Append(chr);
}
break;
default:
if (stack.Count >= 2)
{
stack.Push(chr);
if (stack.Count == 4)
{
//get stack[3]stack[4]
string hexString = string.Format("{1}{0}", stack.Pop(),
stack.Pop());
builder.Append(hexString.ConvertHexToASCII());
stack.Clear();
}
}
else
{
builder.Append(chr);
}
break;
}
}
html = builder.ToString();
return html;
}
不知道还有什么我可以做得更好。由于某种原因,这样的代码对我来说总是感觉很脏,即使它是一个线性时间算法,我想这与它必须有多长有关。
在 dotnet core 中,您可以使用 Uri.UnescapeDataString(originalString.Replace("\x","%"))
首先将其转换为 Url 编码字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)