`
SwiftHorse
  • 浏览: 213629 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类
最新评论

交流DELPHI+idhttp(10.0版本)控件取网页源文件乱码解决方法

阅读更多
  我用IDHTTP取目标网页源文件,但对于网页是EUC-JP编码,取出源文件放到memo中显示时是乱码。我再用WebBrowser先显示目标网页,取出源文件显示在memo中正常。
  个别朋友可能会说,是因为Memo控件不支持EUC-JP编码的问题导致,开始我也是这样认为,但应该有方法可以在IDHTTP读到源文件后作转换,WebBrowser控件既然可以做到这一点,我想用IDHTTP同样应该是可以的。
  我试着设置以下属性,但依然未能解决问题:
  IdHTTP.Request.AcceptLanguage := 'ja';
  IdHTTP.Request.AcceptEncoding := 'Shift_JIS';

  用WebBrowser和IDHTTP两种控件取网页的源文件,对于euc-jp编码的网页为什么用WebBrowser取出的源码可以正常显示,而用IDHTTP取出的源码是乱码,请有经验的DX发表高见。
  我现在要用IDHTTP取网页源文件,因为它的好处在可以不用显示网页,速度快,而用WebBrowser要先显示完网页才能读到源文件,效果不如前。
分享到:
评论
4 楼 SwiftHorse 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;
3 楼 SwiftHorse 2008-03-23  
继续补充:
A、用IDHTTP取出来源文件显示如下:
<title>惗拞宲丂傆傞偝偲堦斣両</title>
B、用WebBrowser取出来源文件显示如下:
<TITLE>生中継 ふるさと一番!</TITLE>

WebBrowser取出来的是我想要的,问题就是通过IDHTTP怎样才能得到WebBrowser这样的效果?
2 楼 SwiftHorse 2008-03-23  
补充:我用IE找开目标网页,查看源文件,显示也是简体乱码,但用firefox找开目标网页,查看源文件显示正常。我想firefox浏览器既然可以做到,那总是应该有方法的,请交流指导!
1 楼 zbird 2008-03-21  
WebBrowser取出来的好像是unicode的。
IDHTTP你得自己进行编码转换。

相关推荐

    DelphiXE + idHttp和HttpServer + 当客户端与服务器作数据传输的实例+(源码+测试可用)

    在客户端,我们可以利用idHttp组件的Post方法,向服务器发送POST请求,携带自定义的数据。在服务器端,HttpServer接收到请求后,会调用预先设定的处理函数,解析请求数据并做出响应。这种模式适用于文件上传、文本...

    delphi 7 idhttp post 的8种使用方法

    以上就是Delphi 7中IDHTTP组件进行POST请求的8种常用方法。每个示例都包含了源码,可直接用于实践中,以适应不同的网络通信需求。学习和理解这些方法,有助于提高Delphi应用程序的网络功能和性能。

    Delphi使用IdHTTP控件操作Cookies的例子.rar

    本示例将详细介绍如何在Delphi中利用IdHTTP控件进行Cookie操作。 首先,我们需要了解IdHTTP控件的基本用法。在Delphi中, Indy 是一个流行的网络通信库,IdHTTP是Indy库中的一个组件,它提供了一个简单的方式来发送...

    delphi操作IdHTTP报头读写

    在Delphi中,IdHTTP组件提供了便捷的方法来设置和获取这些报头字段。 设置HTTP请求报头: 1. 创建IdHTTP组件:在Delphi的Form设计界面或代码中,首先创建一个TIdHTTP对象,例如: ```delphi var IdHTTP: TIdHTTP;...

    delphi 7 idhttp post 的8种使用方法(含源码)

    本教程将详细阐述IDHTTP组件进行POST请求的8种不同方法,每种方法都有其特定的用途和适用场景。下面,我们将逐一介绍这些方法,并提供源码示例。 1. **基本POST请求** 最简单的POST请求可以通过设置IDHTTP的...

    使用delphi XE的IdHTTP控件POST的例子

    在Delphi XE开发环境中,`IdHTTP`控件是一个非常强大的组件,它允许开发者执行HTTP请求,包括GET、POST等方法。在这个例子中,我们将深入探讨如何利用`IdHTTP`进行POST请求,以及这个过程中的关键知识点。 首先,...

    Idhttp示例.rar_DELPHI7 Idhttp 示例_continuedhxe_delphi7 idhttp_idhtt

    首先,我们需要在 Delphi 7 的工程中导入 Indy 组件库。这通常通过在工具面板(Tool Palette)中选择 "Indy Components" 来完成。一旦 Indy 库被添加,`TIdHTTP` 控件就会出现在面板上,可以将其拖放到窗体上。 1. ...

    Delphi 7 IdHTTP 链接 https 用到的动态链接库文件

    Delphi 7 IdHTTP 链接 https 用到的indy动态链接库文件libeay32.dll和ssleay32.dll,是自己从官网下载测试后能用的。Windows 7 64位。在Delphi7自带的indy运行正常。

    Delphi XE + IdHTTPServer + utf8转换 + json解析(源码+测试可用)

    在IT行业中,Delphi XE是一个著名的面向对象的编程环境,它基于Pascal语言,用于开发桌面应用程序。这个工具集提供了强大的集成开发环境(IDE),以及丰富的类库,包括VCL(Visual Component Library)和FireMonkey...

    delphi +aps idhttp上传文件

    本知识点主要探讨如何使用Delphi结合APS IDHTTP组件来实现文件上传。 1. **IDHTTP组件介绍**: IDHTTP是Indy库的核心组件,它提供了完整的HTTP客户端功能,包括GET、POST、PUT等请求方法。在Delphi中,你可以通过...

    Delphi的rest与idhttp的post提交+源码+测试可用

    总结,Delphi中的REST与IDHTTP组件结合使用,使得开发人员能够轻松地向RESTful API发送POST请求,处理网络交互。通过源码和测试用例,开发者可以更好地理解和应用这些概念,提高开发效率和代码质量。

    delphiIdHttp_delphi_idhttp_进度_

    下载过程通常包含一个循环,循环的次数取决于文件的大小和每次请求的数据量。在每次循环中,`TIdHTTP`会从服务器获取一部分数据,然后将其写入内存流或文件流。当内存流达到一定大小或下载完成时,我们可以将内存流...

    delphi idhttp 循环 Post

    在Delphi编程环境中,IDHTTP组件是Indy库中用于HTTP通信的重要组件,它提供了丰富的功能,如GET、POST、PUT等HTTP请求方法。当我们需要进行循环POST操作时,这通常涉及到批量数据发送或者模拟用户行为,例如提交表单...

    delphi网页解析类,主要针对idhttp等方式获取的源码进行解析(原创)

    非常小巧实用的网页解析类,在delphi 10.2下编译通过,主要方法:getElementByid getElementsByTagName(aTag : string) getElementByTagNameAndFlag getElementsByClassName 标签主要属性:innerText , innerHTML ...

    Delphi中idHttp和HttpServer当客户端与服务器作数据传输的实例

    在Delphi编程环境中,`idHttp` 和 `idHttpServer` 是两个非常重要的组件,用于实现客户端和服务器之间的数据通信。这两个组件是 Indy (Internet Direct) 库的一部分,提供了丰富的功能来处理HTTP协议的需求。 首先...

    Indy10.6和OpenSSL解决D7下GET&POST;乱码下载

    在Delphi 7 (D7)到XE6的版本中,开发者可能会遇到使用Indy10.6进行网络通信时中文乱码的问题。这个问题主要涉及到字符编码的处理,特别是当发送或接收包含中文字符的数据时。 首先,让我们来看看"libeay32.dll"和...

    DELPHIXE10.3.1 做IDHTTP开发SSL时,提示使用的2个DLL文件 libeay32.DLL 和 ssleay32.DLL 亲测可用

    在实际开发中,还需要注意系统的环境变量和依赖库的版本兼容性,不同版本的OpenSSL可能与不同的Delphi版本存在兼容性问题。此外,定期更新OpenSSL库是必要的,以获取最新的安全修复和性能改进。 总的来说,libeay32...

    Delphi XE8 IDHTTP1.get()方法從Servlet服务器取json数据

    在本示例中,我们探讨了如何在 Delphi XE8 中使用 IDHTTP1.get() 方法从一个基于 Servlet 3.1 的服务器获取 JSON 数据。这个过程涉及到 Delphi 客户端与 Java 服务端之间的通信,其中 JSON 用于数据交换格式。以下是...

    Delphi Xe10 使用Idhttp get 新浪股票API

    ### Delphi Xe10 使用 IdHTTP GET 新浪股票 API #### 概述 本篇文章主要介绍了如何在 Delphi Xe10 开发环境中利用 Indy 库中的 `TIdHTTP` 控件发起 HTTP GET 请求来获取新浪股票 API 接口的数据。通过这种方式,...

    Delphi10中idHttpServer接收中文参数乱码的处理

    但在接收浏览器发送的带中文URL时,取参数就会是乱码。经过查找资源,发现大部分浏览器,中文一般会先转码为utf-8,此时,idHttpServer控件会根据请求头中ContentType的Chatset进行相应的转码,以形成正确的参数。但...

Global site tag (gtag.js) - Google Analytics