Viper029
@Viper029
Программирую за печенье

Как убрать баг кодировки через webbrowser C#?

Добрый день, товарищи. Столкнулся с таким глюком. У меня парсится JSON файл с сервера. Просто подключаюсь элементом webbrowser к нужной странице, забираю данные в поток, вырезаю только JSON-кусок в 9мб и работаю с ним дальше. Возникла проблема с большой русской буквой Р. Она просто ломается. Вместо нее "� ".
5b85945c7234b213179351.png
Возможно, так происходит и с другими заглавными буквами.
При этом, если сохранять JSON файл руками через браузер Опера, он сохраняется нормально. Где-то читал, что это из-за особенностей utf-8 кодировки. Есть ли возможность устранить этот баг без смены библиотеки webbrowser? Понятно, что могу написать фикс и модифицировать данные после получения, но очень не хотелось бы этого делать.

Вызываю поток в коде:
Thread tr = new Thread(GetDoc);
                tr.SetApartmentState(ApartmentState.STA);
                tr.Start();
                Thread.Sleep(20000);
                tr.Abort();
                //// Ожидание прерывания
                tr.Join();

А так достаю JSON файл:
static void GetDoc()
        {
            web = new WebBrowser();
            web.DocumentCompleted += web_DocumentCompleted;
            web.Navigate("тут Сайт");
            Application.Run();
        }
        //Загрузка JSON и сохранение в файл source.json
        static void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            File.Delete("source.json");
            FileInfo MyFile = new FileInfo("source.json");
            FileStream fs = MyFile.Create();
            fs.Close();
            FileStream fileStream = new FileStream("source.json", FileMode.Open);
            StreamWriter streamWriter = new StreamWriter(fileStream);
            streamWriter.BaseStream.Seek(fileStream.Length, SeekOrigin.End);//запись в конец файла
            Encoding encoding = Encoding.GetEncoding("utf-8");
            //Encoding encoding = Encoding.GetEncoding(web.Document.Encoding);
            string temp = null;
            Stream stream = web.DocumentStream;
            StreamReader sr = new StreamReader(stream, encoding);
            temp = sr.ReadToEnd();
            stream.Close();
            //string temp = web.DocumentText;
            //Образка лишнего кода
            Regex regex1 = new Regex("<BODY><PRE>");
            Regex regex2 = new Regex("</PRE></BODY></HTML>");
            Match m1 = regex1.Match(temp);
            Match m2 = regex2.Match(temp);
            temp = temp.Substring(m1.Index + 11, m2.Index - 11 - m1.Index);
            streamWriter.Write(temp);
            streamWriter.Close();
            fileStream.Close();
            downJSONok = true;           
            Thread.CurrentThread.Abort();
            //MessageBox.Show("Download complete. Press OK to continue.", "Done", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            //Environment.Exit(0);
        }
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
devspec
@devspec
Помогло? Отметь решением
Это не код, это какая-то ерунда, простите.
Даже не буду разбираться в этом.
Пользуйтесь нормальными решениями для парсинга.
И никогда не используйте регулярки при парсинге HTML.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы