Веб-скребок заменяет некоторые символы на вопросительные - PullRequest
1 голос
/ 28 марта 2012

Я делаю простой веб-скребок, который записывает слова для меня, а затем записывает их в базу данных. все работает, но по какой-то причине он заменяет некоторые символы знаками вопроса, и когда я просматриваю эту информацию на простой веб-странице php, я вижу много ошибок в текстах.

I?m = I'm
Let?s = Let's
haven?t = haven't
stuff like that.

Я знаю, что ошибка в c # и моем коде, потому что я ставлю точки останова, прежде чем он записывает в базу данных, и отображаю его в поле расширенного текста. Как заставить его правильно отображать эти символы?

        public static string getSourceCode(string url)
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            StreamReader sr = new StreamReader(resp.GetResponseStream());
            string sourceCode = sr.ReadToEnd();
            sr.Close();
            resp.Close();
            return sourceCode;
        }
........
string url = txbURL2.Text;

string sourceCode = sourceCode = WorkerClass.getSourceCode(url);
int startIndex = sourceCode.IndexOf("<td valign=\"top\" width=\"100%\">");
sourceCode = sourceCode.Substring(startIndex, sourceCode.Length - startIndex);
........
//Gets Lyric
startIndex = sourceCode.IndexOf("<br><b>Lyrics:</b><br><br>") + 30;
endIndex = sourceCode.IndexOf("     <br><br>", startIndex);
string lyric = sourceCode.Substring(startIndex, endIndex - startIndex) + "";
rtbLyric.Text = lyric;
//End Lyric

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

Возможно, проблема в кодировке символов.Я предполагаю, что веб-страница, которую вы копируете, кодируется в UTF8, но где-то вдоль линии вы конвертируете в ASCII.

Ознакомьтесь с отличной статьей под названием " Что должен знать каждый разработчиккодировка символов"для более подробной информации.

Обновление

Вы можете попробовать это, хотя StreamReader должно по умолчанию использовать UTF-8 в любом случае:

var encoding = System.Text.Encoding.GetEncoding("utf-8");
StreamReader sr = new StreamReader(resp.GetResponseStream(), encoding);  
0 голосов
/ 06 июля 2012

Вы также можете попробовать использовать WebClient:

WebClient client = new WebClient { Encoding = Encoding.UTF8 };
string html = client.DownloadString(url);
0 голосов
/ 28 марта 2012

Проверьте кодировку, выполнив поиск кодировки в html-коде.
Ваш фрагмент кода пропускает фактический процесс загрузки, поэтому невозможно определить, где он идет не так.

...