Curl 编码序列无效,用于编码';utf-8';

Curl 编码序列无效,用于编码';utf-8';,curl,encoding,d,immutability,Curl,Encoding,D,Immutability,我正在使用从删除网页获取HTML的模块。但是我在编码方面有一些问题,我不知道如何解决。一些页面,如facebook.com我收到以下错误消息(运行时): 对于google.com,我得到了(我得到的是二进制吗?怎么得到的?) 对于dlang.org 问题是:正确的阅读方式是什么?独立于页面编码 这是我的D代码: string get_html(string page) { auto client = HTTP(); client.clearRequestHeaders(); cli

我正在使用从删除网页获取HTML的模块。但是我在编码方面有一些问题,我不知道如何解决。一些页面,如
facebook.com
我收到以下错误消息(运行时):

对于
google.com
,我得到了(我得到的是二进制吗?怎么得到的?)

对于
dlang.org

问题是:正确的阅读方式是什么?独立于页面编码

这是我的D代码:

string get_html(string page) {
  auto client = HTTP(); 
  client.clearRequestHeaders();
  client.addRequestHeader("DNA", "1");
  client.addRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
  client.addRequestHeader("Accept-Encoding", "gzip, deflate");
  client.addRequestHeader("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1");
  client.addRequestHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");

  return cast(string)get(page, client);
}

提前感谢。

curl真的支持gzip和deflate编码以及ISO-8859-1字符集吗?您真的应该自己指定这些头,而不是让curl本身声明它支持的编码和字符集吗

回答你的问题:

问题是:正确的阅读方式是什么?独立于页面编码

您查看服务器发送给您的包含页面编码和字符集的标题,然后根据这些标题解释数据(例如,调用zlib来解压缩或膨胀数据,然后将解压缩的HTML转换为UTF-8)。

cast(string)get(page,client)
对于任何非
UTF-8
序列都会失败


使用独立的
get
post
功能,这些功能根据服务器发送的头对内容进行解码,并返回有效的
UTF-8

这些功能是什么?只调用
get(page)
而不是?是的,对于UFCS它是:
url.get()
,这看起来很酷,我想。但是我真的需要发送一些标题。因此,
get(page,client)
是非常必要的。感谢您提供
url.get()
:)您可以将自己的
Http
struct传递给
get
,并设置附加的头。
�S��7�砱�y�����g�d��C���|��W��O�s��~����*6��@�4�&�A�J����r▒4=�FT�e�� [...]
string get_html(string page) {
  auto client = HTTP(); 
  client.clearRequestHeaders();
  client.addRequestHeader("DNA", "1");
  client.addRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
  client.addRequestHeader("Accept-Encoding", "gzip, deflate");
  client.addRequestHeader("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1");
  client.addRequestHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");

  return cast(string)get(page, client);
}