gpt4 book ai didi

html - 这个html页面有什么问题?

转载 作者:可可西里 更新时间:2023-11-01 13:03:12 24 4
gpt4 key购买 nike

我想将特定页面转换为文本文件或使用 wget(例如 -m)下载其中的一些链接,但是大多数工具都无法解释来源。

例如:

$ curl http://www.free-energy-info.co.uk/ | html2text
curl: (23) Failed writing body (0 != 2896)

但是使用-check 正确返回源代码:

$ html2text -check http://www.free-energy-info.co.uk/
<HTML>
<HEAD>
<TITLE>
...

然后我发现这个页面包含一些二进制数据和特殊字符,例如:

$ curl -s http://www.free-energy-info.co.uk/ | head | cat -v
M-^?M-~<^@h^@t^@m^@l^@>^@
^@
^@<^@h^@e^@a^@d^@>^@
^@
^@<^@T^@I^@T^@L^@E^@>^@F^@r^@e^@e^@-^@E^@n^@e^@r^@g^@y^@ ^@D^@e^@v^@i^@c^@e^@s^@,^@ ^@z^@e^@r^@o^@-^@p^@o^@i^@n^@t^@ ^@e^@n^@e^@r^@g^@y^@,^@ ^@a^@n^@d^@ ^@w^@a^@t^@e^@r^@ ^@a^@s^@ ^@H^@H^@O^@ ^@f^@u^@e^@l^@<^@/^@T^@I^@T^@L^@E^@>^@

这个网站有什么问题?是网络服务器的错误,源代码被故意打乱,还是使用了某种特殊格式(因为它看起来没有压缩)?如何使标准实用程序(例如 wget)可以理解此页面?

请注意,它在网络浏览器中运行良好。

最佳答案

该页面只是UTF-16LE 格式(这可以通过W3 Validator 来检查)。

初始二进制序列(UTF-16BE 为U+FEFF,UTF-16LE 为U+FFFE)称为the byte order mark (BOM) 向程序发出信号,表明文本是 Unicode 编码的(8 位、16 位或 32 位)。

$ curl -s http://www.free-energy-info.co.uk/ | hexdump -n2
0000000 ff fe

所以听起来 wgethtml2text 还不支持这种格式。它下载,但问题在于内容解析(递归下载)。当前版本的 wget 假定输入数据可用于传统的 C 字符串函数,但 UTF-16 (Unicode) 不能用于它(参见:The input byte stream)。


至于解决方法,您可以使用 iconv 命令将源代码转换回 UTF-8,例如

$ curl -s http://www.free-energy-info.co.uk/ | iconv -f "UTF-16" -t "UTF-8" | head | cat -v
<html>
<head>
<TITLE>Free-Energy Devices, zero-point energy, and water as HHO fuel</TITLE>
<META NAME="Description" CONTENT="magnet power, free energy devices, power from aerials, gravity power, water power, renewable energy and electronics tutorial.">

因此,使用 curl 将页面保存为 UTF-8 的语法可以是:

curl -s http://example.com/ | iconv -f "UTF-16" -t "UTF-8" > index.html

然后让html2text工作,从标准输入读取源代码,例如

iconv -f "UTF-16" -t "UTF-8" <(curl -s http://www.free-energy-info.co.uk/) | html2text

对于 wget,您可以指定 --remote-encoding,但这还不受支持,并且失败:

This version does not have support for IRIs

在 GNU Wget 1.16.3 中测试。


我已经在 #47689 报告了这个错误, 其中Tim Ruehsen表示他已将 UTF-16 编码的 HTML 页面的解析支持提交到 wget 的下一个版本 2,但它仍然需要一些工作(例如 -k 仍然不起作用)。

测试新版本后,尝试:

wget -r --local-encoding=UTF-16LE --input-file index.html --force-html --base http://www.free-energy-info.co.uk

根据 Tim 的建议.

注意:如果您的 wget 是使用调试支持编译的,请添加 -d

关于html - 这个html页面有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36605946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com