none
\x29 などの文字の変換 RRS feed

  • 質問

  • Web ページを取得し、そこから文字列を取り出す処理を書いています。

    その際、\x28 や \x29 などの形で入っている文字を ( や ) といった文字に変換したいのですが
    こういうものをすべて一度に変換することはできないのでしょうか?

    ひとつひとつ置換処理を行うしかありませんか?

    言語は C# で、.NET Framework 4.0 は現在使う予定はありません。

    2010年7月2日 9:09

回答

すべての返信

  • System.Web.HttpUtility.HtmlDecodeを使うのは?
    • 回答としてマーク SweetSmile 2010年7月5日 1:56
    2010年7月2日 9:37
  • > Web ページを取得し、そこから文字列を取り出す処理を書いています。

    「Web ページを取得」と言ってもいろいろやり方があるし、具体的にどのよう
    にしているのですか? さらに、そこから文字列の取得はどのようにやってい
    るのですか?

    2010年7月2日 14:00
  • こんにちは。

    > System.Web.HttpUtility.HtmlDecodeを使うのは?
    そういえばそんなのがありましたね。

    ただ、説明が足りなかったというか自分でもすっかり忘れていたのですが
    取得するページは動的に表示を変更できるように javascript を使っているページで
    取得したい文字列も script タグで囲まれたものなので
    それではどうも無理なようです。
    (Javascript の演算子などと混同しないようにエスケープ処理したものなんで
    通常の文字に変えちゃうとまずいってことですね(?))

    Javascript での処理がどうなっているのかわかりませんが
    とりあえず一つ一つ string クラスの replace で置換していくことにしました。

    2010年7月5日 1:56
  • こんにちは。

    > 「Web ページを取得」と言ってもいろいろやり方があるし、具体的にどのようにしているのですか
    おおざっぱに書くと

    HttpWebRequest HWRequest = (HttpWebRequest)WebRequest.Create("http://...");
                
    HttpWebResponse HWResponse = (HttpWebResponse)HWRequest.GetResponse();
    
    StreamReader targetStream = new StreamReader(HWResponse.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
    
    string targetHTML = targetStream.ReadToEnd();
    targetStream.Close();

    という感じです。

    文字列の取得は正規表現を使って
    Regex クラスから MatchesCollection で取得しています。

    とりあえず string クラスの replace メソッドで一つ一つ置換処理していますが
    正規表現であわせて置換もできると少しはパフォーマンスもあがるのかな?

    ただ正規表現はなかなか難しくて
    いまはパターンマッチだけで精一杯です。

    2010年7月5日 2:08