我在以适当的字符集检索http get请求的内容时遇到问题。
我尝试了几段代码,如下所示:
HttpClient h = new HttpClient();
//Content-Type: text/html; charset=UTF-8
//p.s. contents are in hebrew.
var resp = h.GetAsync("http://www.wnf.co.il");
var content = resp.Result.Content;
//remove the default Content-Type header
content.Headers.Remove("Content-Type");
content.Headers.Add("Content-Type", "text/html; charset=utf-8");
var res = content.ReadAsStringAsync();
var s = res.Result;
Console.WriteLine(s);
这仍然没有帮助,我仍然以错误的编码获取内容。
This post澄清说,设置头部的请求头部字符集不会有帮助,需要设置的是响应。(此外,在尝试将头部Content-Type添加到请求头部时会出错。)
但我仍然不能以正确的字符集(utf-8)检索内容。
我错过了什么?
我用希伯来语站点做类似的事情已经有一段时间了,在比较来自这个站点的Fiddler和其他我没有这个问题的站点的响应头时,我看到的唯一的区别确实是响应中的Content-Type头。
发布于 2016-02-19 01:47:08
这个问题可能是由于这个bug造成的:
解决方法是获取字节数组形式的响应,然后自己对其进行编码:
var bytes = await content.ReadAsByteArrayAsync();
var s = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
顺便说一句,您使用.Result
而不是await
有什么原因吗?您正在不必要地阻塞当前线程,并将自己设置为死锁。
https://stackoverflow.com/questions/35479300
复制相似问题