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 Streamgiá 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 Streamgiá 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 StreamReaderxung quanh luồng, sau đó gọi ReadToEnd.
WebClient.DownloadStringThay 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-Agentbạn nghĩ vậy?
WebClientvà HttpWebRequestsử 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-Agentvấ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();
}
StreamReadercó 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 GetResponseStreamcó 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.