2012-04-25 60 views
2

我遇到了一些奇怪的事情,我希望你的意见。WebBrowser DocumentText编码

有一个网页,其中包含span元素与InnerTextInnerHtml属性中的一些希腊文本。

该页面的编码是希腊文(Windows)

if的说法是:

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

这条线的工作100%,但我以前的非工作代码为:

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

此行没有工作,当我点击了使用调试器预览我注意到希腊文本是不可读的(奇怪的符号而不是希腊字符)。但是,包含希腊文本的所有其他元素都被应用程序成功读取,也就是说我可以将它们的属性保存在变量中并使用它们。有没有解释为什么DocumentText失败,InnerText成功了?

+0

你能告诉我你是如何获得'mySpan'的价值吗? – wal 2012-04-25 07:37:55

+0

'HtmlElement mySpan = browser.Document.GetElementById(mySpanId);' – iCantSeeSharp 2012-04-25 07:40:51

回答

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)方面这就是为什么你正确地看到它使用此电话时页面的表示编码越来越见this link

+0

检查此刻,我会回来告诉你发生了什么事。 – iCantSeeSharp 2012-04-25 07:54:34

+0

你的情况下'browser.Document.Encoding'的值是多少?这应该传递给StreamReader(在'WebBrowser'类中,但它不是) – wal 2012-04-25 08:00:08

+0

它是Windows-1253 – iCantSeeSharp 2012-04-25 08:06:59