作者: | 来源:互联网 | 2023-10-13 14:04
在此之前,我有先获取过他的response.ContentEncoding,但是值为空,看了别人的解决方案,都是五花八门,想想还是自己干吧!RestSharp可能是老外开发的,人
在此之前,我有先获取过他的response.ContentEncoding,但是值为空,看了别人的解决方案,都是五花八门,想想还是自己干吧!
RestSharp 可能是老外开发的,人家压根没考虑你中国人的编码习惯,通通都是utf-8
好在人家代码是开源的,我直接拿来断点,看是哪里出问题了!
直接进入正题,由于嵌套太深,没有仔细去了解每一步的过程,我直接切到HttpResponse.cs中的Content get方法
在这个类中,还有个属性,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
我生成的仍在审核,等会给大家放上来!