几年来,我一直在使用lynx -dump
包含非拉丁字符的网页中的内容进行“抓取”。我将页面内容保存到一个文件中,然后通过 sed 代理对其进行修改,并将其通过电子邮件正文发送——所有这一切都发生在我创建的脚本中。但我发现,在切换发行版(Ubuntu 到 Void)后,我的脚本无法按预期工作。我已经确定了故障点,如下所示。
当我从命令行运行脚本的第一部分(包含内容的部分lynx -dump URL
以及要保存内容的文件名)时,一切都按预期工作。该文件显示并包含我期望的非拉丁字符。然而,当我尝试通过规定与 cron 作业相同的命令来自动化该过程时,结果不同。预期的文件确实出现了,但我得到的是使用拉丁字符音译的相同文本,而不是包含预期的非拉丁字符,而不是我想要的。我的脚本中接下来的内容失败了,因为它取决于非拉丁字符的存在。
那么,为什么这些奇怪的结果取决于我是否从命令行发出 lynx 命令而不是在 cron 作业中发出?也许该网站正在进行某种检测并在一种情况下提供音译页面,但在另一种情况下则不提供?或者 lynx 本身正在将非拉丁字符音译为拉丁字符?意见将不胜感激。
答案1
lynx
使用当前区域设置来确定可用于显示页面的字符集。但是,此信息可能无法获得cron
,因此您需要执行以下操作:
lynx -display_charset=UTF-8 -dump http://example.com/some/page.html
(当然,如果与 UTF-8 不同,请使用您系统上的字符集)。
答案2
lynx 使用您的音译语言环境设置作为提示。在 中运行cron
,区域设置很可能是 POSIX。我会先调查一下。
对于 lynx 的配置,从这里开始:
- 字符集(话题)
CHARACTER_SET
LOCALE_CHARSET
LOCALE_CHARSET
覆盖CHARACTER_SET
如果为 true,则使用当前区域设置查找对应的 MIME 名称,并将其用作显示字符集。