为部分utf8编码的URL查找解析API

时间:2008-12-11 16:25:32

标签: c# .net uri

在为某些网页解析HTML时(最值得注意的是,任何Windows实时页面)我会遇到以下格式的大量网址。

HTTP \ X3A \ X2F \ x2fjs.wlxrs.com \ x2fjt6xQREgnzkhGufPqwcJjg \ x2fempty.htm

这些似乎是部分UTF8转义字符串(\ x2f = /,\ x3a =:等等...)。是否有.Net API可用于将这些字符串转换为System.Uri?似乎很容易解析,但我试图避免今天建立一个新的车轮。

3 个答案:

答案 0 :(得分:3)

您发布的内容无效HTTP。因此,HttpUtility.UrlDecode()当然不起作用。但无论如何,你可以把它变成这样的普通文本:

string input = @"http\x3a\x2f\x2fjs.wlxrs.com\x2fjt6xQREgnzkhGufPqwcJjg\x2fempty.htm";
string output = Regex.Replace(input, @"\\x([0-9a-f][0-9a-f])",
    m => ((char) int.Parse(m.Groups[1].Value, NumberStyles.HexNumber)).ToString());

但请注意,这假设编码是Latin-1而不是UTF-8。您提供的输入在这方面尚无定论。如果你需要UTF-8工作,你需要一个稍长的路线;你必须将字符串转换为字节并用过程中的相关字节替换转义序列(可能需要一个while循环),然后在结果字节数组上使用Encoding.UTF8.GetString()

答案 1 :(得分:0)

这是另一个解决方案:(从@timwi解决方案继续)

string output = Regex.Replace(input, @"\\x([0-9a-f][0-9a-f])",
            m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString());

答案 2 :(得分:-1)

您是否尝试过HttpUtility.UrlDecode