2008-12-11 424 views
8

解析某些網頁(最明顯的是,任何Windows Live網頁)的HTML時,我遇到了很多以下格式的URL。爲部分utf8編碼的URL查找解析API

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

這些似乎是部分UTF8轉義字符串(\ X2F = /,\ X3A =:等...)。是否有.Net API可用於將這些字符串轉換爲System.Uri?似乎很容易解析,但我試圖避免今天建立一個新的車輪。

+0

FYI。請注意,將此url作爲字符串粘貼到瀏覽器控制檯中會提供正確的輸出。 (不是真實的,但FYI)http://i.stack.imgur.com/2md5D.jpg – 2013-01-11 20:46:41

+0

這裏是與它一起玩的在線工具... http://www.javascriptobfuscator.com/Default.aspx – 2013-01-11 20:48:44

回答

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()

0

這裏是另一種解決方案:(從@timwi溶液續)

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