【问题标题】:Webclient UploadValues encodingWebclient UploadValues 编码
【发布时间】:2015-10-20 19:38:52
【问题描述】:

我在 URL 中创建了一个POST 并将响应作为字符串获取,如下所示:

var responseBytes = client.UploadValues("www.example.com", requestData.Body);
var html = Encoding.UTF8.GetString(responseBytes, 0, responseBytes.Length);
html = HttpUtility.HtmlDecode(html);

我创建了一个 WebClient 孩子来接受 cookie,所以我创建了一个此类:

 public class CookieWebClient : WebClient
{
    public CookieContainer CookieContainer { get; }

    public CookieWebClient()
    {
        CookieContainer = new CookieContainer();
        Encoding = Encoding.UTF8;
    }

    public CookieWebClient(CookieContainer cookieContainer)
    {
        CookieContainer = cookieContainer;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address) as HttpWebRequest;
        if (request == null) return base.GetWebRequest(address);
        request.CookieContainer = CookieContainer;
        return request;
    }
}

如您所见,我在构造函数中设置了编码。但是当我得到html 属性时,一些字符会出现:� necess�rio,它应该是É necessário

有什么想法吗?

【问题讨论】:

  • 那么服务器实际使用的是什么编码?你看过返回的字节吗?
  • var html = Encoding.GetEncoding("ISO-8859-1").GetString(responseBytes, 0, responseBytes.Length); ?
  • @RubensFarias 用它来回答,并认为它是正确的。

标签: c# .net encoding webclient


【解决方案1】:

您使用的是“Latin 1”字符(可能是葡萄牙语?),所以您应该使用:

var html = Encoding.GetEncoding("ISO-8859-1")
                   .GetString  (responseBytes, 0, responseBytes.Length);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2022-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多