2011-09-25 52 views
2

如果我使用wget下载this页:HTML文件获取“wget的”报告为二进制“少”

wget http://www.aqr.com/ResearchDetails.htm -O page.html 

,然后尝试在less查看页面,少报告的文件作为一个二进制文件。

less page.html 
"page.html" may be a binary file. See it anyway? 

这些响应头:

Accept-Ranges:bytes 
Cache-Control:private 
Content-Encoding:gzip 
Content-Length:8295 
Content-Type:text/html 
Cteonnt-Length:44064 
Date:Sun, 25 Sep 2011 12:15:53 GMT 
ETag:"c0859e4e785ecc1:6cd" 
Last-Modified:Fri, 19 Aug 2011 14:00:09 GMT 
Server:Microsoft-IIS/6.0 
X-Powered-By:ASP.NET 

打开该文件在vim工作正常。

任何线索为什么不能处理它?

回答

2

这是一个UTF-16编码文件。 (Check with W3C Validator)。您可以使用此命令将其转换为UTF-8:

wget http://www.aqr.com/ResearchDetails.htm -q -O - | iconv -f utf-16 -t utf-8 > page.html 

less usally知道UTF-8。

编辑

由于@StephenÇ报道,less红帽支持UTF-16。它在我看来,Red Hat patched less for UTF-16 support。在official site of the less UTF-16支持目前是一个未解决的问题(编号282)。

+0

郁闷在HTML元中它被报告为“charset = iso-8859-1” - 大概这只是错误的? – Joel

+0

绝对不是ISO-8859-1。也许它来自一个模板或者文件被意外地用UTF-16保存。 – palacsint

2

因为是UTF-16编码为可与ff ee的BOM中的前两个八位字节中可以看出:

$ od -x page.html | head -1 
0000000 feff 003c 0021 0044 004f 0043 0054 0059 

VIM是关于它更聪明(因为它是多个Unicode时代)比less

补充说:

适合做什么它见Convert UTF-16 to UTF-8 under Windows and Linux, in C。或者用vim用UTF-8编码将其写回。

+0

尼斯猜测,但我认为'wget'没那么蠢产生的未压缩的二进制数据输出。 –

+0

@dma_k:你是对的,这就是我固定我的答案的原因(也就是说,你的评论适用于之前的编辑,我不希望人们指点和笑,因为它现在没什么意义) – msw

+0

烦人的HTML元它被报告为“charset = iso-8859-1” - 可能这只是错误的? – Joel

0

很有可能这个HTML文件包含UTF字符,而且您的语言环境设置不正确(export LANG=en_US.UTF8 LESSCHARSET=utf-8)。它也可能发生HTML包含无效字符。

编辑:在检查文件后,我清楚地看到它是UTF-16。因此,您需要相应地更正您的终端设置(尽管我能够使用UTF8设置正确查看文本,也许我的终端程序很智能)。

1

首先,它适用于我。当我使用该文件下载文件时,我收到一个“less”文件,显示我没有任何问题/问题。 (我用红帽的Fedora 14)

二, “文件” 命令报告 “page.html中” 为:

page.html中:小端UTF-16的Unicode HTML文档中的文本,具有非常长线,用CRLF线路终端

也许UTF-16编码是问题的原因。 (但是,为什么......我不知道为什么它会与我的版本“少”而不是你的版本。)


@ palacsint的解决方案适用于我:

wget http://www.aqr.com/ResearchDetails.htm -q -O - | \ 
    iconv -f utf-16 -t utf-8 > page.html 
+0

“我不知道为什么它能与我的版本”少“而不是你的” - 它是红帽特定的,它们修补了less和''file'以支持UTF-16](https:// bugzilla.redhat.com/show_bug.cgi?id=235420)。看看我更新的答案。在我以前的Debian UTF-16上不支持'less'和'file'。 – palacsint