8

特定のWebページ(特に、Windowsのライブページ)のHTMLを解析すると、次の形式のURLが多数表示されます。

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

これらは部分的にUTF8でエスケープされた文字列のようです(\ x2f = /、\ x3a =:など…)。これらの文字列をSystem.Uriに変換するために使用できる.NetAPIはありますか?解析するのは簡単なようですが、今日は新しいホイールを作成しないようにしています。

4

3 に答える 3

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

ただし、これはエンコーディングが UTF-8 ではなく Latin-1 であることを前提としていることに注意してください。あなたが提供した情報は、その点で決定的ではありません。UTF-8 が機能する必要がある場合は、少し長いルートが必要です。文字列をバイトに変換し、エスケープ シーケンスをプロセス内の関連するバイトに置き換えて (おそらく while ループが必要)、Encoding.UTF8.GetString()結果のバイト配列で使用する必要があります。

于 2009-09-14T13:54:27.623 に答える
0

ここに別の解決策があります:(@timwi解決策から続く)

string output = Regex.Replace(input, @"\\x([0-9a-f][0-9a-f])",
            m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString());
于 2013-01-11T21:02:12.517 に答える
-1

HttpUtility.UrlDecodeを試しましたか?

于 2008-12-11T17:59:11.723 に答える