Tôi thấy nhiều ví dụ nhưng tất cả chúng đều đọc chúng thành các mảng byte hoặc 256 ký tự cùng một lúc, một cách chậm rãi. Tại sao?
Không nên chỉ chuyển đổi Stream
giá trị kết quả thành một chuỗi mà tôi có thể phân tích cú pháp nó?
Tôi thấy nhiều ví dụ nhưng tất cả chúng đều đọc chúng thành các mảng byte hoặc 256 ký tự cùng một lúc, một cách chậm rãi. Tại sao?
Không nên chỉ chuyển đổi Stream
giá trị kết quả thành một chuỗi mà tôi có thể phân tích cú pháp nó?
Câu trả lời:
Bạn nên tạo StreamReader
xung quanh luồng, sau đó gọi ReadToEnd
.
WebClient.DownloadString
Thay vào đó bạn nên cân nhắc việc gọi điện .
User-Agent
.
<a href=
thay vì cái cũ <A href=
. Điều đó vẫn liên quan đến mã hóa hay User-Agent
bạn nghĩ vậy?
WebClient
và HttpWebRequest
sử dụng HTTP thô mà không liên quan đến trình duyệt. Nếu các trình duyệt khác nhau hiển thị các Nguồn Chế độ xem khác nhau , thì đó là một User-Agent
vấn đề.
Bạn có thể sử dụng StreamReader.ReadToEnd()
,
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
StreamReader
có tham số thứ hai Encoding.UTF8
. Không thông báo rằng lúc đầu khi nhìn vào MS tài liệu
GetResponse and GetResponseStream
có thể ném ngoại lệ
Như @Heinzi đã đề cập, nên sử dụng bộ ký tự của phản hồi.
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();
}
Richard Schneider đã đúng. sử dụng mã bên dưới để tìm nạp dữ liệu từ trang web không phải là bộ mã utf8 sẽ nhận được chuỗi sai.
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
"Tôi không thể bỏ phiếu. vì vậy đã viết điều này.