微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#:WebClient - 无法识别西里尔字符

如何解决C#:WebClient - 无法识别西里尔字符

尝试解析站点link

下载内容代码

WebClient client = new WebClient();
client.Encoding = System.Text.Encoding.ASCII; // OR UTF8
string reply = client.DownloadString(url);

回复

<!DOCTYPE HTML>
<html prefix="og: http://ogp.me/ns#">
<head><Meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <link rel="icon" type="image/vnd.microsoft.icon" href="https://spravnik.com/favicon.ico"/>
    <link rel="SHORTCUT ICON" href="https://spravnik.com/favicon.ico"/>
    <link href="/src/main.css?v=1.25" rel="stylesheet" type="text/css" />
    <script src="https://cdn.contentsitesrv.com/js/push/subscribe.js?v=1.3.0"></script>
<title>??????????? 12 ??????? ??. - ?????????? ?????????? ??????</title>
<Meta name="keywords" content="?????????? ?????????? ????????????,???? 09 ????????????,?????????? ????? ????????????"/>
<Meta name="description" content="? ??????????? &#9742; ????????? ?? ??????? ????? ??? ???? ???????????? ?? 12 ??????? ??. ????? ???????? ?? ?????? ????????,?????? ???????? ????? ???????? ? ????? ?? ?????? ????????."/>
<Meta property="og:title" content="?????????? ??????????. ??????????? ? ?? ??????...!"/>

所有西里尔字符都转换为“???”或者在����

解决方法

看起来这个站点只是忽略了您的客户端编码并以 1251 编码返回您的数据。我更喜欢使用 RestClient 并检查响应 ContentType。但是,如果您对这个网站有绝对的把握 - 下面的代码可以正常工作。

WebClient client = new WebClient {Encoding = Encoding.UTF8};
byte[] reply = client.DownloadData(url);

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding encoding1251 = Encoding.GetEncoding("windows-1251");
var convertedBytes = Encoding.Convert(encoding1251,Encoding.UTF8,reply);

string result = Encoding.UTF8.GetString(convertedBytes);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。