8

在为某些网页(尤其是任何 Windows 实时页面)解析 HTML 时,我会遇到很多以下格式的 URL。

http\x3a\x2f\x2fjs.wlxrs.com\x2fjt6xQREgnzkhGufPqwcJjg\x2fempty.htm

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

4

3 回答 3

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()在生成的字节数组上使用。

于 2009-09-14T13:54:27.623 回答
0

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

string output = Regex.Replace(input, @"\\x([0-9a-f][0-9a-f])",
            m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString());
于 2013-01-11T21:02:12.517 回答
-1

你试过HttpUtility.UrlDecode吗?

于 2008-12-11T17:59:11.723 回答