浏览 8346 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-21
个别朋友可能会说,是因为Memo控件不支持EUC-JP编码的问题导致,开始我也是这样认为,但应该有方法可以在IDHTTP读到源文件后作转换,WebBrowser控件既然可以做到这一点,我想用IDHTTP同样应该是可以的。 我试着设置以下属性,但依然未能解决问题: IdHTTP.Request.AcceptLanguage := 'ja'; IdHTTP.Request.AcceptEncoding := 'Shift_JIS'; 用WebBrowser和IDHTTP两种控件取网页的源文件,对于euc-jp编码的网页为什么用WebBrowser取出的源码可以正常显示,而用IDHTTP取出的源码是乱码,请有经验的DX发表高见。 我现在要用IDHTTP取网页源文件,因为它的好处在可以不用显示网页,速度快,而用WebBrowser要先显示完网页才能读到源文件,效果不如前。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-21
WebBrowser取出来的好像是unicode的。
IDHTTP你得自己进行编码转换。 |
|
返回顶楼 | |
发表时间:2008-03-23
补充:我用IE找开目标网页,查看源文件,显示也是简体乱码,但用firefox找开目标网页,查看源文件显示正常。我想firefox浏览器既然可以做到,那总是应该有方法的,请交流指导!
|
|
返回顶楼 | |
发表时间:2008-03-23
继续补充:
A、用IDHTTP取出来源文件显示如下: <title>惗拞宲丂傆傞偝偲堦斣両</title> B、用WebBrowser取出来源文件显示如下: <TITLE>生中継 ふるさと一番!</TITLE> WebBrowser取出来的是我想要的,问题就是通过IDHTTP怎样才能得到WebBrowser这样的效果? |
|
返回顶楼 | |
发表时间:2008-03-24
到今天有了新的进展,但也碰到了新的问题。对于日文(Shift-JIS)编码可以正常通过IDHTTP取到正确的源文件,但对于日文EUC編碼去却以下程式不能得到正确结果,不解。贴出我的代码,可以供需要取Shift-JIS编码的朋友参考。
var IframeUrl: string; ret:WideString;//TStringStream; SourceHtmlCode: WideString; begin IframeUrl := 'http://ctplp.blog15.fc2.com/blog-entry-33.html';//这个网站是EUC-JS编码 //IframeUrl := 'http://www.nhk.or.jp/furusato/koremade/koremade_ibaraki.html';//这个网站是SHIFT-JS编码 IdHTTP.HandleRedirects:=true; IdHTTP.Request.ContentType:= 'application/x-www-form-urlencoded'; IdHTTP.Request.UserAgent:= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)'; IdHTTP.Request.SetHeaders; try SourceHtmlCode := StringToWideString(IdHTTP.Get(IframeUrl),51932);//日文EUC編碼是51932 日文(Shift-JIS)是932 Memo1.Lines.Text := SourceHtmlCode; except ShowMessage('未找到HTTP服务器'); end; end; function StringToWideString(const S: string; CodePage: Word): WideString; var InputLength, OutputLength: Integer; begin InputLength := Length(S); OutputLength := MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, nil, 0); SetLength(Result, OutputLength); MultiByteToWideChar(CodePage, 0, PChar(S), InputLength, PWideChar(Result), OutputLength); end; |
|
返回顶楼 | |