delphi7 用 idhttp.get 抓取网页显示乱码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi7 用 idhttp.get 抓取网页显示乱码相关的知识,希望对你有一定的参考价值。
网址为 http://odds.500.com/fenxi/shuju-519826.shtml
应该怎么设置,有人知道吗?
我也是纯自学菜鸟,关键就是不知道如何转换,有没有可以直接使用的函数,这个网页头里面写的编码是GB2312,为什么其他网页GB2312的网页都不需要转换
追答ASCII字符如空格或者有其它字符集字符一类字符混杂容易出现乱码什么的…
编码转换这方面我也只能找网络解决了
下面这个应该有帮助
http://www.360doc.com/content/13/1223/06/9200790_339393545.shtml
德尔福。使用 idHTTP 显示获取。在多语言 Windows 中获取 Unicode 文本
【中文标题】德尔福。使用 idHTTP 显示获取。在多语言 Windows 中获取 Unicode 文本【英文标题】:Delphi. Show gotten with idHTTP.Get Unicode text in multilanguage Windows 【发布时间】:2011-06-07 16:27:43 【问题描述】:我需要你的帮助。请帮帮我。
我有 Delphi 2010
我尝试 idHTTP.Get 一个带有 Unicode 文本(俄语)的文件从站点到 Windows 7 英文版的 MemoryStream。
然后我将这个带有 Unicode 文本的 MemoryStream 加载到例如备忘录中。
如果我在控制面板中将俄语设置为“非 Unicode 程序的语言”,则文本会正确显示在备忘录中。但是如果我设置 Enlish - 我会得到错误的字符 (*$^#~!@)。
如何使用 idHTTP.Get 从站点加载 Unicode 中的俄语文本并在任何 Windows(中文、英文等)中正确显示???
谢谢你的帮助!!!
【问题讨论】:
除了写句子来描述您所做的事情之外,请复制并粘贴您的代码。此外,请使用此页面底部的“联系我们”链接请求管理员将您的多个帐户合并为一个。 【参考方案1】:我建议更新到支持 Unicode 的最新 Delphi 版本。
更新: 看起来内存流实际上在特定代码页中包含 AnsiText,而不是真正的 Unicode 文本。您可以使用该代码页声明一个适当的 AnsiString 变量,将文本加载到该变量中,然后将该变量加载到备忘录中。
如果没有看到真实数据,很难说出更多信息。
【讨论】:
@Michael:D2010 确实支持 Unicode,所以应该没有问题。 但是我有问题,如果我没有在idHTTP中设置字符集/代码页会不会出错? 向服务器发送请求时不要设置字符集(除非向服务器发送文本)。服务器会告诉您它在响应中发送给您的文本的字符集编码。如果检测到,最新版本的 Indy 10 会使用该字符集对文本进行解码。如果使用错误的字符集来解码文本,可能会导致问题。【参考方案2】:TMemo 需要 Unicode(UTF-16 编码)文本。如果您使用填充TStream
的TIdHTTP.Get()
版本下载文本,那么您正在下载原始(通常是Ansi 编码)文本,然后负责手动将其解码为Unicode,然后将其分配给@987654323 @。
假设网络服务器正在为响应标头中的文本指定正确的字符集,然后使用返回 String
的 TIdHTTP.Get()
版本。 TIdHTTP
将检测字符集并将原始数据解码为 Unicode,例如:
Memo1.Text := IdHTTP1.Get('http://addr_here');
【讨论】:
【参考方案3】: 更新到 D2009 或更高版本 使用支持unicode的组件(我记得TMS提供了一些组件) 为您使用的语言正确设置字符集/代码页【讨论】:
我有 Delphi 2010。我在 idHttp 中使用 Memory Stream,所以 idHTTP 不会将字符更改为其他代码。我没有设置字符集/代码页。我会试试的。 @Michael:因为您正在下载到TMemoryStream
,所以您正在接收原始编码数据。然后,您有责任自己解码数据,然后才能正确显示它。最好让 Indy 为你解码。以上是关于delphi7 用 idhttp.get 抓取网页显示乱码的主要内容,如果未能解决你的问题,请参考以下文章
Delphi idhttp解决获取UTF-8网页中文乱码问题