Поиск API синтаксического анализа для частично кодированных URL-адресов utf8

При синтаксическом анализе HTML для определенных веб-страниц (особенно для любой страницы Windows Live), я сталкиваюсь с множеством URL-адресов в следующем формате.

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

Похоже, это частично экранированные строки UTF8 (\ x2f = /, \ x3a = :, и т. Д.). Есть ли .Net API, который можно использовать для преобразования этих строк в System.Uri? Кажется, достаточно просто разобрать, но я стараюсь не строить новое колесо сегодня.

11.12.2008 16:25:31
К вашему сведению обратите внимание, что вставка этого URL-адреса в виде строки в консоли браузера обеспечит правильный вывод. (не реализовано, но, к вашему сведению) i.stack.imgur.com/2md5D.jpg
Royi Namir 11.01.2013 20:46:41
и вот онлайн-инструмент для игры с ним ... javascriptobfuscator.com/Default.aspx
Royi Namir 11.01.2013 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 для работы, вам нужен немного более длинный маршрут; вам придется преобразовать строку в байты и заменить escape-последовательности соответствующими байтами в процессе (вероятно, необходим цикл while), а затем использовать Encoding.UTF8.GetString()полученный результирующий байтовый массив.

3
14.09.2009 13:54:27
Что значит UTF-8 для работы ? у него есть строка, которая по умолчанию является Unicode. Вы можете объяснить? (PS +1)
Royi Namir 11.01.2013 21:03:04
@RoyiNamir: его пример включает только символы ASCII. Неясно, как он ожидает кодирования не-ASCII символов, скажем так á. Если он закодирован как \xe1, то это Latin-1 (не Unicode). Если он закодирован как \xc3\xa1, то это UTF-8, что означает, что для кодирования одного символа используется несколько байтов. Поскольку его кодировка, кажется, принимает две шестнадцатеричные цифры после \x, она не может использовать UTF-16 или UTF-32.
Timwi 13.01.2013 20:19:31
если я пишу в консоли \xe1 , это представляет собой символ Unicode или кодировку UTF8? как JS справиться с этим?
Royi Namir 13.01.2013 20:54:07

Вы пробовали HttpUtility.UrlDecode ?

-1
11.12.2008 17:59:11

вот другое решение: (как продолжение решения @timwi)

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