使用 w3m 转储 html 源会产生意外的字符/符号

use*_*034 4 html http w3m

作为 w3m 的新用户,我正在尝试做一些基本的事情,例如:

w3m -dump_source nytimes.com > nytimes.html
Run Code Online (Sandbox Code Playgroud)

产生的输出给出了疯狂的字符和符号。但是,当我使用 浏览时w3m nytimes,它会正确加载,我什至可以使用v.

进一步当我尝试:

w3m -dump_extra nytimes.com > nytimes.html
Run Code Online (Sandbox Code Playgroud)

除了 HTML 源代码之外,我完美地获得了与该站点相关的所有额外信息。

任何帮助,将不胜感激。

Rus*_*nov 6

默认情况下,w3m通过发送以下 HTTP 标头从服务器请求压缩输出:

Accept-Encoding: gzip, compress, bzip, bzip2, deflate
Run Code Online (Sandbox Code Playgroud)

标头的值可能因w3m的版本而异,但事实是最新版本的程序使用标头请求从主机压缩输出Accept-Encoding。您可以使用以下命令找出确切的标题:

w3m -dump_source -reqlog nytimes.com > /dev/null
Run Code Online (Sandbox Code Playgroud)

请求和响应头将被记录到~/.w3m/request.log文件中。

您可以通过如下覆盖标头来请求未压缩版本:

w3m -dump_source nytimes.com -o accept_encoding='identity;q=0'
Run Code Online (Sandbox Code Playgroud)

甚至

w3m -dump_source nytimes.com -o accept_encoding='*;q=0'
Run Code Online (Sandbox Code Playgroud)

或者,通过管道解压缩输出:

w3m -dump_source nytimes.com | gunzip -f
Run Code Online (Sandbox Code Playgroud)

如果输入数据不是gunzip识别的格式,该-f选项会导致gunzip将输入数据复制到标准输出而不更改。根据文档,您还应该传递选项,但即使没有此选项,管道命令也应将结果打印到标准输出。--stdout

请注意,服务器可能会响应以 .zip 格式压缩的内容bzip2。在这种情况下,您可以通过bunzip2 -f命令管道输出。