使用StreamReader和WebResponse编码问题

时间:2015-01-22 12:13:25

标签: xml character-encoding f# streamreader

我正在尝试使用WorldBank API读取XML流。有问题的网址是http://api.worldbank.org/country?per_page=100,现在在我的网络浏览器中运行正常并返回XML文档。

然而,这在FSI中不会很好用。该流基本上是一堆垃圾,根据XML文档和响应标头,内容的编码是UTF-8,我设置StreamReader使用该编码,但它看起来并不像帮助。

以下是代码:

let downloadUrl(url:string) = 
    async { let request = HttpWebRequest.Create(url)
            use! response = request.AsyncGetResponse()
            let stream = response.GetResponseStream()
            use reader = new StreamReader(stream, Text.Encoding.UTF8)
            return! Async.AwaitTask <| reader.ReadToEndAsync() }

1 个答案:

答案 0 :(得分:0)

我想通了,显然返回的流是GZip压缩的,所以我不得不改变代码,所以它会使用自动解压缩..我应该提一下..这不是非常强大的代码HttpWebRequest.Create除了HttpWebRequest之外,我可以在模式匹配中使用类型检查来确定返回的类型,但是这可以用于我的目的,因为我知道我只会将它用于HttpWebRequests

let downloadUrl(url:string) = 
    async { let request = HttpWebRequest.Create(url) :?> HttpWebRequest
            request.AutomaticDecompression <- DecompressionMethods.GZip
            use! response = request.AsyncGetResponse()
            let stream = response.GetResponseStream()
            use reader = new StreamReader(stream, Text.Encoding.UTF8)
            return! Async.AwaitTask <| reader.ReadToEndAsync() }