なぜ私は外国人のキャラクターを拾っているのですか?それをどうやって削除できますか?

c# html html-agility-pack string

質問

HTML Agility Packを使用してH3タグのInnerTextを取得すると、ソースと比較して余分な文字(Ã、)を取り上げています。

私はこれらの文字がどこから来ているのか、それらを取り除く方法がわからない。

抽出された文字列:

 Week 1

HTMLソース:

<h3>
<span> </span>Week 1</h3>

現在のコード:

private void getWeekNumber(string url)
{
    HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

    htmlDoc.Load(new System.IO.StringReader(url));

    foreach (HtmlAgilityPack.HtmlNode h3 in htmlDoc.DocumentNode.SelectNodes("//h3"))
    {
        MessageBox.Show(h3.InnerText);
    }
}

現在の回避策 (stackoverflowのどこかから盗まれ、リンクが失われました):

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "GET";

using (var stream = request.GetResponse().GetResponseStream())
using (var reader = new System.IO.StreamReader(stream, Encoding.UTF8))
{
    result = reader.ReadToEnd();
}

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

htmlDoc.Load(new System.IO.StringReader(result));

foreach (HtmlAgilityPack.HtmlNode h3 in htmlDoc.DocumentNode.SelectNodes("//h3"))
{
    MessageBox.Show(h3.InnerText);
}

受け入れられた回答

あなたがする前に、エンコーディングを設定する必要があります...

htmlDoc.Load(new System.IO.StringReader(url), Encoding.UTF8);

これは、文字が他のエンコーディングではなくUTF8であることを敏捷性パックに伝えます。

あなたがここでそれをする必要がある理由は、これがきちんと解析された点です。その後、リテラルÃ、文字を格納しています。

インターネットからHTMLをダウンロードした後に変更された文字列の文字も重要です。


人気のある回答

あなたの文字エンコーディング、UTF-8エンコーディングの設定



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ