Это базовый пример, который мне удалось придумать:
static void Sample()
{
var str = @"http:\/\/example.com\/xyz?params=id%2Cexpire\u0026abc=123";
str = str.Replace("\\/", "/");
str = HttpUtility.UrlDecode(str);
str = Regex.Replace(str, @"\\u(?<code>\d{4})", CharMatch);
Console.Out.WriteLine("value = {0}", str);
}
private static string CharMatch(Match match)
{
var code = match.Groups["code"].Value;
int value = Convert.ToInt32(code, 16);
return ((char) value).ToString();
}
Вероятно, этого очень не хватает в зависимости от типов URL, которые вы собираетесь получить.Он не обрабатывает проверку ошибок, экранирование литералов, например \\u0026
должно быть \u0026
.Я бы порекомендовал написать несколько модульных тестов для этого с различными входными данными, чтобы начать работу.