HttpResponseMessage内容字符串似乎是错误的编码

时间:2015-05-08 21:35:19

标签: c# html http

我正在使用控制台应用程序与第三方网站进行通信。为了确定表单提交是否成功完成,我想查询响应消息以确定提交按钮是否仍在页面上。

Fiddler中的响应标题如下所示:

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 08 May 2015 19:31:34 GMT
Content-Length: 93993

我的代码如下所示:

var enc = Encoding.UTF8;
using (Stream responseStream =  responseMessage.Content.ReadAsStreamAsync().Result)
            {
                using (var rd = new StreamReader(responseStream, enc))
                {
                    var stringContent = rd.ReadToEnd();
                    if (!stringContent.Contains("submitButtonTag"))
                        result = true;

                }
            }

但是当我在Visual Studio中查看返回的字符串时,字符看起来像这样:

�\b\0\0\0\0\0\0�\a`I�%&/m�{J�J��t�\b�`$ؐ@������iG#)�*��eVe]f@�흼��{���

我会一直跑到提交页面看看会发生什么,但我可以提交的测试表格数量有限。这只是Visual Studio呈现这些的方式吗?有没有办法可以让这个回复成为我可以比较的可读字符?

1 个答案:

答案 0 :(得分:1)

在@JoeEnos的评论之后,我能够在阅读流之前简单地添加GZip解压缩。代码如下。

var enc = Encoding.UTF8;

using (Stream responseStream =  responseMessage.Content.ReadAsStreamAsync().Result)
{
    using (var decompressedStream = new GZipStream(responseStream, CompressionMode.Decompress))
    {
        using (var rd = new StreamReader(decompressedStream, enc))
        {
            var stringContent = rd.ReadToEnd();
            if (!stringContent.Contains("submitButtonTag"))
                result = true;

        }
    }                   
}