在为某些网页解析HTML时(最值得注意的是,任何Windows实时页面)我会遇到以下格式的大量网址。
HTTP \ X3A \ X2F \ x2fjs.wlxrs.com \ x2fjt6xQREgnzkhGufPqwcJjg \ x2fempty.htm
这些似乎是部分UTF8转义字符串(\ x2f = /,\ x3a =:等等...)。是否有.Net API可用于将这些字符串转换为System.Uri?似乎很容易解析,但我试图避免今天建立一个新的车轮。
答案 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?