代码之家  ›  专栏  ›  技术社区  ›  JaredPar

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

  •  8
  • JaredPar  · 技术社区  · 15 年前

    在分析特定网页(尤其是任何Windows Live网页)的HTML时,我会遇到以下格式的大量URL_。

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

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

    3 回复  |  直到 11 年前
        1
  •  3
  •   Timwi    15 年前

    您发布的内容不是有效的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());
    

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

        2
  •  0
  •   Royi Namir    11 年前

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

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

    你试过吗? HttpUtility.UrlDecode ?