2

何かおかしなことに出くわしましたので、ご意見をお聞かせください。

and属性spanにギリシャ語のテキストを含む要素を含むWebページがあります。InnerTextInnerHtml

ページのエンコーディングはギリシャ語(Windows)です。

私のif声明は次のとおりです。

if (mySpan != null && mySpan.InnerText.Contains(greekText))

この行は100%動作しますが、以前の動作しないコードは次のとおりです。

if (mySpan != null && browser.DocumentText.Contains(greekText))

この行は機能せず、デバッガーでプレビューをクリックすると、ギリシャ語のテキストが読み取れないことに気付きました(ギリシャ語の文字ではなく奇妙な記号)。ただし、ギリシャ語のテキストを含む他のすべての要素は、アプリケーションによって正常に読み取られました。つまり、それらの属性を変数に保存して使用することができました。なぜDocumentText失敗してInnerText成功したのか説明はありますか?

4

1 に答える 1

2

ソースを見ると、WebBrowser.DocumentTextデフォルトでUTF8エンコーディングを使用しているように見えます。

public string DocumentText
{
  get
  {
    Stream documentStream = this.DocumentStream;
    if (documentStream == null)
      return "";
    StreamReader streamReader = new StreamReader(documentStream);
    documentStream.Position = 0L;
    return streamReader.ReadToEnd();
  }

つまりStreamReader、エンコーディングを指定せずにを使用すると、UTF8エンコーディングが想定されます。

この問題を回避するには、このリンクを参照してください

browser.Document.GetElementById(mySpanId)私は、この呼び出しを使用するときに正しく表示される理由である、ページの指定されたエンコーディングを尊重することのみを想定できます。

于 2012-04-25T07:44:31.120 に答える