为什么用idhtttp下载的网页有的是乱码?

imho888 2009-02-23 09:22:34
我用
myText:string;
myText:=idHttp.Get()
得到的网页源码有的是正常的能看到中文字,也有些是不正常的乱码但是通过UTF8Decode()转换也能得到源码。
但是这个网站就不行:http://nj.ganji.com/jianzhi/
用IE浏览查看源文件也是乱码
我以为是用了GZIP压缩,但用GZIP解压也不行
我用WebBrowser来先浏览后取webBrowser的源码是正常的,可以看到正常的汉字。
有什么办法不用webBrowser来得到该正常源码?

非常感谢帮忙,100分送上,如果不够可以另加。
...全文
96 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
imho888 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Seamour 的回复:]
delphi的Utf8ToUnicode返回了-1,导致不能正确decode,没空研究它的解码到底哪儿有问题了,反正我都用api的

Delphi(Pascal) code
const
URL = 'http://nj.ganji.com/jianzhi/';
var
s : string;
sw : WideString;
l, lw : Integer;
begin
s := IdHTTP1.Get(URL);
l := Length(s);
lw := MultiByteToWideChar(CP_UTF8, 0, Pointer(s), l, nil, 0);
SetLength(sw, lw);
MultiByteToWideChar(C…
[/Quote]



谢谢你,结贴
Seamour 2009-02-23
  • 打赏
  • 举报
回复
delphi的Utf8ToUnicode返回了-1,导致不能正确decode,没空研究它的解码到底哪儿有问题了,反正我都用api的

const
URL = 'http://nj.ganji.com/jianzhi/';
var
s : string;
sw : WideString;
l, lw : Integer;
begin
s := IdHTTP1.Get(URL);
l := Length(s);
lw := MultiByteToWideChar(CP_UTF8, 0, Pointer(s), l, nil, 0);
SetLength(sw, lw);
MultiByteToWideChar(CP_UTF8, 0, Pointer(s), l, Pointer(sw), lw);
Memo1.Text := sw;
end;

imho888 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 starluck 的回复:]
idhttp.Request.AcceptCharSet := 'UTF-8';


D7下就加上這句
[/Quote]


加了,校果一样,还是乱码。
starluck 2009-02-23
  • 打赏
  • 举报
回复
idhttp.Request.AcceptCharSet := 'UTF-8';


D7下就加上這句
imho888 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 starluck 的回复:]


2009下的話,用這個:
var
vStream: TMemoryStream;
begin
vStream:= TMemoryStream.Create;
IdHTTP1.Get('http://nj.ganji.com/jianzhi/', vStream);
vStream.Position := 0;
Memo1.Lines.LoadFromStream(vStream);
vStream.Free;
end;
[/Quote]


我用delphi7 用你的方还是不行,你可以自己试试看。
imho888 2009-02-23
  • 打赏
  • 举报
回复
不是,我用IE6,我试试一楼看看
Seamour 2009-02-23
  • 打赏
  • 举报
回复
就是utf-8编码啊,ie7看也正常啊
你这不是广告贴吧?
starluck 2009-02-23
  • 打赏
  • 举报
回复


2009下的話,用這個:
var
vStream: TMemoryStream;
begin
vStream:= TMemoryStream.Create;
IdHTTP1.Get('http://nj.ganji.com/jianzhi/', vStream);
vStream.Position := 0;
Memo1.Lines.LoadFromStream(vStream);
vStream.Free;
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧