這幾天為了某事情用 wget 砍站,但因為對方目錄使用中文命名,wget 遇到中文不但網址錯誤,連檔案名稱的文字也變成亂碼。
原因是 wget 對國際語言的支援不夠完整,判斷 URL 中的特殊字元後在轉成檔名儲存,而遇到中文字時轉換會錯誤。目前官方是出的版本沒有辦法使用參數或設定繞過這個問題,但可以透過修改程式碼再重新編譯解決。
先從 GNU Wget 網站上將 source 抓回來。開啟 wget-1.x/src/url.c,找到以下程式片段:
quoted = 0;
for (p = b; p < e; p++)
if (FILE_CHAR_TEST (*p, mask) )
++quoted;
改成:
quoted = 0;
for (p = b; p < e; p++)
if (FILE_CHAR_TEST (*p, mask) && !((*p | 0x0fffffff) == 0xffffffff) )
++quoted;
存檔後重新編譯:
$ ./configure
$ make
完成後用剛編譯完成的 wget 來抓檔案:
$ ./wget-1.x/src/wget -np -r http://path.to/your/檔案名稱/
Reference:
wget中文乱码 – 互联网络 – c – Linux – Wget – 自说Me话
http://isayme.com/2011/07/fix-wget-for-zh-cn/
wget中文乱码 | 可可熊的窝
http://cocobear.info/blog/2008/04/19/wget-chinese-encode/