Я бачу багато прикладів, але всі вони повільно читають їх у байтові масиви або 256 символів. Чому?
Чи не бажано просто перетворити отримане Stream
значення у рядок, де я можу його проаналізувати?
Я бачу багато прикладів, але всі вони повільно читають їх у байтові масиви або 256 символів. Чому?
Чи не бажано просто перетворити отримане Stream
значення у рядок, де я можу його проаналізувати?
Відповіді:
Ви повинні створити StreamReader
навколо потоку, а потім зателефонувати ReadToEnd
.
WebClient.DownloadString
Замість цього вам слід зателефонувати .
User-Agent
.
<a href=
замість старої, яка була <A href=
. Це все ще пов’язано з кодуванням, чи User-Agent
ви думаєте?
WebClient
і HttpWebRequest
використовувати сирий HTTP без задіяного браузера. Якщо різні браузери показують різні джерела перегляду , це User-Agent
проблема.
Ви можете використовувати StreamReader.ReadToEnd()
,
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
StreamReader
бере другий параметр Encoding.UTF8
. Спочатку не помітив, що під час перегляду документації MS
GetResponse and GetResponseStream
може кинути винятки
Як згадував @Heinzi, слід використовувати набір символів відповіді.
var encoding = response.CharacterSet == ""
? Encoding.UTF8
: Encoding.GetEncoding(response.CharacterSet);
using (var stream = response.GetResponseStream())
{
var reader = new StreamReader(stream, encoding);
var responseString = reader.ReadToEnd();
}
Річард Шнайдер має рацію. використовуйте код нижче, щоб отримати дані з сайту, який не є кодировкою utf8, отримає неправильний рядок.
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
"я не можу голосувати. так написав це.