2011-09-25 53 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