Добрый день, товарищи. Столкнулся с таким глюком. У меня парсится JSON файл с сервера. Просто подключаюсь элементом webbrowser к нужной странице, забираю данные в поток, вырезаю только JSON-кусок в 9мб и работаю с ним дальше. Возникла проблема с большой русской буквой Р. Она просто ломается. Вместо нее "� ".
Возможно, так происходит и с другими заглавными буквами.
При этом, если сохранять 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);
}