前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.net6环境下RestSharp获取gbk网页乱码的解决方案

.net6环境下RestSharp获取gbk网页乱码的解决方案

作者头像
阿炬
发布2021-06-21 19:01:31
6760
发布2021-06-21 19:01:31
举报
文章被收录于专栏:阿炬.NET阿炬.NET
代码语言:javascript
复制
        public IActionResult GetHiPda()
        {
            cookies = @"__utmz=128828693.1622702936.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); cdb_cookietime=2592000; cdb_auth=fd05ACWP2GIZl8k0oqBaZUtQ8WjXIxIXESeqpdSfAzikXEX4tYdJM%2B4FIBRY7jXLyGQs0yjP3K2kgFK6MFe6fcJkrIH5; smile=1D1; discuz_fastpostrefresh=0; __utmc=128828693; cdb_visitedfid=2D6; cdb_sid=0ZwKQ7; __utma=128828693.1700824799.1622702936.1623767772.1623808037.73; __utmt=1; __utmb=128828693.1.10.1623808037; checkpm=1";
            string url = @"https://www.hi-pda.com/forum/forumdisplay.php?fid=2";
            var client = new RestClient(url);
            var request = new RestRequest();
            request.AddHeader("cookie", cookies);
            var response = client.Get(request);
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            var data=HttpUtility.UrlDecode(response.RawBytes, Encoding.GetEncoding("gbk"));
            return Content(data);
        }

引入NuGet包:System.Text.Encoding.CodePages

CLR中的Encoding就是用于字节和字符之间的转换的。

CLR中的Encoding是在System.Text命名空间下的,它是一个抽象类(abstract class), 所以不能被直接实例化,它主要有如下的派生类:ASCIIEnding,UnicodeEncoding,UTF32Encoding,UTF7Encoding,UTF8Encoding,你可以根据需要选择一个合适的Encoding来进行编码和解码。你也可以调用Encoding的静态属性ASCII,Unicode,UTF32,UTF7,UTF8,来构造一个Encoding。其中Unicode是表示16位Encoding。调用静态属性和实例化一个子类的效果是一样的,如下代码。

1 Encoding encodingUTF8 = Encoding.UTF8; 2 Encoding encodingUTF8 = new UTF8Encoding(true);

以下是这些类型的一些简单描述:

ASCII编码 将16位字符编码成ASCII码,只能转换值小于Ox0080的16字符,并且被转换成单字节,就是说一个字符对应一个字节。当字符都在ASCII范围(0X00~0X7F)内时,可以用这种编码,它的速度非常快,适合于英美地区的字符。这种编码非常有限,汉字会被转换成乱码。在CLR对应ASCIIEndoing。

UTF-16 每个字符编码成2个字节,它不会对字符产生任何影响,也不会涉及到压缩处理,性能非常好,因为CLR中的字符也是16位的Unicode。在CLR中对应UnicodeEncoding。

UTF-32 使用4个字节编码成一个字符。从内存角度上讲,它并不是一种高效能的编码方案,因为第个字符都是4个字节,特别占内存,所以很少用来做文件和网络流的编码解码。在CLR中对应UTF32Encoding。

UTF-8 值在Ox0080之下的字符压缩成一个字符,也就是ASCII码;值在0X0080---0X07FF之间的字符都转换成2个字符,适合用于欧洲和中东地区。0X0800以上被转换成3个字符,适合于东亚地区的字符。代理项被转换成4个字节。因此,它是一种非常流行的编码,适用于互联网。它在处理0X0800以上的字符效率不好UTF-16。在CLR中对应UTF8Encoding。

UTF-7 这咱编码通常用于旧的系统,那时的系统是用7位值表示。目前已经被Unicode协淘汰。在CLR中对应UTF7Encoding。

————————————————

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-06-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档