gpt4 book ai didi

delphi - 无法使用 IdHttp 解码响应内容

转载 作者:行者123 更新时间:2023-12-01 21:39:37 24 4
gpt4 key购买 nike

我使用 TIdHttp 来获取网页内容。响应头指示内容编码为utf8。我想在控制台中打印内容为CP936(简体中文),但实际内容不可读。

Result := TEncoding.Utf8.GetString(ResponseBuffer);

我在 python 中做了同样的事情(使用 httplib2),没有任何问题。

def python_try():
conn = httplib2.HttpConn()
respose, content = conn.get(...)
print content.decode('utf8') # readable in console
<小时/>

更新1

我调试了原始响应并注意到内容已被 gzip 压缩。

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Content-Encoding: gzip
Vary: Accept-Encoding
Date: Mon, 24 Dec 2012 15:27:44 GMT
Connection: Keep-Alive

我尝试将 IdCompressorZLib 实例分配给 IdHttp 实例。不幸的是,应用程序在解压缩 gzip 内容时会崩溃。测试地址为“http://www.baidu.com”(encoding=gb2312)。

<小时/>

更新2

我还尝试下载一个 gzipped jquery 脚本文件,其中仅包含 ascii 字符。这次可以了,说明是Indy库的问题。如果我没猜错的话,我应该结束这个问题。

最佳答案

TIdHTTP为您处理 gzip 解压缩,如果您有 TIdCompressorZLib分配给 TIdHTTP.Compressor 的组件属性(property)。否则,您必须手动解压缩它(如果未分配 TIdHTTP 属性,则默认情况下 Accept-Encoding 将不会发送 Compressor header )。

对于UTF-8编码,TIdHTTP如果您正在调用 TIdHTTP.Get() 的重载版本,也会为您处理该问题。或TIdHTTP.Post()返回 String 的方法值而不是填充 TStream目的。它会为您将 UTF-8 解码为 UTF-16。要将其转换为 CP936,您可以让 RTL 为您进行转换:

type
Cp936String = type AnsiString(936);
var
S: Cp936String;
begin
S := Cp936String(IdHTTP1.Get(...));

关于delphi - 无法使用 IdHttp 解码响应内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14017186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com