![文本文件被识别为二进制](https://linux22.com/image/137365/%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E8%A2%AB%E8%AF%86%E5%88%AB%E4%B8%BA%E4%BA%8C%E2%80%8B%E2%80%8B%E8%BF%9B%E5%88%B6.png)
背景
lynx
几年来我一直使用自动转储(通过 cron)、处理(使用awk
、sed
和tr
),然后mail
(bsd-mailx)网页内容。它一直运行得很好——直到最近,当网站安全证书过期并且愚蠢的网络管理员懒得更新它时。现在,由于lynx
对证书犹豫不决并在继续之前等待用户输入,自动化解决方案失败了。
尝试的解决方案
所以我开始寻找其他解决方案。curl
看起来很有希望,因为它有一个--insecure
开关。事实上,使用它,我可以下载页面文本,并将其进一步处理为更标准的文本输出,可以进入电子邮件正文,然后将其保存到文件中。
然而,我遇到的问题是,该文件在某种程度上被系统视为charset=binary
(根据 的输出file -i
)——可能是因为它包含非拉丁字母(西里尔字母)中的文本。因此,当我尝试将cat
文件内容放入我发送给自己的电子邮件正文中时,邮件程序(bsd-mailx)希望将其视为附件 - 这不是我想要的 - 而不是将其插入到电子邮件的正文。
由于我很难理解所涉及的所有问题,所以到目前为止我还没有找到解决方案。
问题
- 有什么方法可以导致文件不保存/识别为二进制文件吗?
或者以某种方式将其从二进制转换为某种有效的字符集?
- 请注意,如果我将文件的内容复制到剪贴板,然后将其粘贴到一个新的文本文件中,我创建的一切都有效:
file -i
显示charset=utf-8
,并且我可以成功地将cat
内容放入电子邮件正文中,而不会将其视为附件。但我正在寻找可以作为 cron 作业自动化的东西,所以这并不是我真正希望的解决方案。
- 请注意,如果我将文件的内容复制到剪贴板,然后将其粘贴到一个新的文本文件中,我创建的一切都有效:
附:我记得在 下也遇到过类似的问题,但通过在调用 时lynx
添加开关来解决,IIRC 。-display_charset=UTF-8
lynx
更新
在这里,使用卢卡斯的建议,是有效的: 一个相当笨拙的两阶段过程,我确信一定有简单的方法来简化并使其更加优雅,但它确实完成了工作。任何人都可以提供改进吗?显然,和是我正在使用的实际和命令的替代品,它们主要是去除 html 标签和无关的空格。
curl --insecure https://my.url.html >/home/user/file.html lynx -display_charset=UTF-8 -dump -nonumbers -nolist /home/user/file.html | sed fu begin | sed fu end | tr fu >/home/user/file.txt cat /home/user/file.txt | mail -s "Today's file" [email protected]
sed fu
tr fu
sed
tr