C# RestSharp 发送http请求响应乱码解决方案!

在此之前,我有先获取过他的response.ContentEncoding,但是值为空,看了别人的解决方案,都是五花八门,想想还是自己干吧!

RestSharp 可能是老外开发的,人家压根没考虑你中国人的编码习惯,通通都是utf-8

好在人家代码是开源的,我直接拿来断点,看是哪里出问题了!

 

直接进入正题,由于嵌套太深,没有仔细去了解每一步的过程,我直接切到HttpResponse.cs中的Content get方法

C# RestSharp 发送http请求响应乱码解决方案!_第1张图片

在这个类中,还有个属性,ContentType,我尝试输出了一下,在调用Content方法前,ContentType是有值的,既然有值,那就好办了,直接提取ContentType中的charset值就OK了,具体方法如下:

public string Content {
    //get { return this.content ?? (this.content = this.RawBytes.AsString()); }
    get {
        if (string.IsNullOrEmpty(this.ContentEncoding) && !string.IsNullOrEmpty(this.ContentType)) {
            Match match = Regex.Match(this.ContentType, "charset=(?[\\w|-]+)");
            if (match.Success) {
                this.ContentEncoding = match.Groups["charset"].Value;
                return this.content ?? (Encoding.GetEncoding(this.ContentEncoding).GetString(this.RawBytes));
            }
        }
        return this.content ?? (this.content = this.RawBytes.AsString());
    }
}

关于RestSharp的源码,你们可以自己到作者的github去下:https://github.com/restsharp/RestSharp

将RestSharp目录下的HttpResponse.cs中的Content方法改成文中的方法,然后在生成自己的dll

我生成的仍在审核,等会给大家放上来!

你可能感兴趣的:(C#)