Вы просто предполагаете, что объект находится в UTF-8 при создании вашего потокового считывателя без явной настройки кодировки.Вы должны проверить CharacterSet
HttpWebResponse
(не предоставляется базовым классом WebResponse
) и открыть StreamReader
с соответствующей кодировкой.
В противном случае, если он читает что-то, что не является UTF-8, как если бы это был UTF-8, он наткнется на последовательности октетов, которые недопустимы в UTF-8 и должны заменить символ замены U + FFFD (�
) как можно лучше.
WebClient делает в значительной степени следующее: DownloadString
- это метод более высокого уровня, когда WebRequest
и его производные классы позволяют перейти на более низкий уровень, он имеет один вызов для «отправки запроса GET на URI,изучите заголовки, чтобы увидеть, какая кодировка содержимого используется, на случай, если вам нужно распаковать или распаковать ее, посмотреть, какая кодировка символов установлена, настроить программу чтения текста с этой кодировкой и потоком, изатем позвоните ReadAll()
".Обычные инструкции высокого уровня большого куска по сравнению с инструкциями низкого уровня малого куска плюсы и минусы применяются.