2012/08/13

wget 中文亂碼問題

這幾天為了某事情用 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/

沒有留言:

張貼留言