【问题标题】:Why does the web page I fetch with Perl look odd?为什么我用 Perl 获取的网页看起来很奇怪?
【发布时间】:2011-02-12 03:50:18
【问题描述】:

我有一个 Perl 脚本来打开页面 http://svejo.net/popular/all/new/ 并过滤帖子的名称,但除了标题之外,所有内容似乎都是加密的。什么都无法读取。

当我在浏览器中打开同一个页面时,一切看起来都很好,包括源代码。如何为脚本而不是浏览器加密页面?我的 Perl 脚本发送与我的浏览器 (Google Chrome) 相同的标头。

【问题讨论】:

  • 不知道你在 perl 中做什么,但这对我来说很好用 curl。你怎么知道它是加密的?
  • 向我们展示您正在使用的最小但完整的脚本以及您获得的输出。
  • 当您说except headers everything seems encrypted 时,您的意思是“文本/信息”还是“文本和 html 标签”?
  • 表示服务器响应消息结束的空行之后的所有内容都是一团糟。

标签: html perl http encryption


【解决方案1】:

页面使用 UTF-8 编码。 也许您的 Perl 脚本使用了不同的编码?

我发现这个页面描述了Processing UTF-8 Files with Perl

【讨论】:

  • 我猜这是问题所在,但我不知道如何告诉 perl 使用 utf8。我读到默认情况下它完全使用 utf8。
【解决方案2】:

虽然我不懂保加利亚语,但该页面看起来不错。

#!perl

use LWP::Simple;

getprint( 'http://svejo.net/popular/all/new/' );

此脚本返回纯页面,没有任何看起来奇怪或加密的内容:

Svejo — Популярните новини

您尝试了什么,您使用的是哪个版本的 perl 和模块?您看到的输出是什么?

您澄清您在 Windows 上使用 ActivePerl(请更新您的问题并提供更多详细信息)。请记住,您不仅需要在程序中执行正确的 Unicode 操作,而且您的终端必须设置为正确显示 Unicode。


当你明确地binmode你的输出时会发生什么?

 binmode STDOUT, ':utf8';

尝试将输出保存到文件中,然后在理解 UTF-8 的编辑器中查看。


好吧,那没用。让我们更加通用,将所有句柄设置为默认使用 UTF-8:

  use open IO  => ':utf8';

【讨论】:

  • @brian - 这是西里尔字母,但几乎不是俄语 :) 如果您查看源代码,语言就在那里: -所以它是保加利亚语 (en.wikipedia.org/wiki/Bulgarian_language)。正如 Stevko 所说,它是 UTF-8,或者至少我的 Firefox 是这样说的 :)
  • 顺便说一句,我的 ActiveState Perl (v5.10.1) - 至少在 WindowsXP cmd 终端窗口中 - 确实使用您的 Perl 2 将西里尔文呈现为某种高位 ASCII 艺术字符乱码-上面的班轮。我对 UTF 不够精通,无法提出一个合理的理由:(
  • 我用的是OpeSuse,Perl版本是5.10.0,终端设置为utf8。我什至将脚本输出重定向到一个文件——同样的事情。显然 perl 使用的字符编码与 utf8 不同。顺便说一句,我尝试用简单的curl -i http://svejo.net/thestuffhere(用反引号括起来)替换脚本的连接部分,它可以工作。现在我真的很困惑
  • 好吧,这真的很奇怪,而且有点难以远程弄清楚。你能用perl -V发布你的perl的编译细节吗?另外,这是一个打包的 perl 还是你自己编译的?我会尝试编译另一个 perl 看看会发生什么。不过,这是一项严厉的措施。
  • 它是在发行版中构建的。我会将详细信息作为新答案发布
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
相关资源
最近更新 更多