用wget下载网页时,若文件名含有非ASCII字符或其他特殊字符,就会出现所谓的乱码。若想解决中文乱码的问题,可以修改wget的源代码。
对URL字符串进行编码的源代码文件是url.c。其中,url_file_name()的功能是根据URL判断应该以什么文件名保存文件。而该函数又调用了append_uri_pathel(),该函数调用了FILE_CHAR_TEST()宏,它用于判断URL中的字符是不是特殊字符(也就是需要进行URL编码的字符。当然,包括中文)。问题就出在这个宏身上了。为了不对中文转义,需要将中文字符当作普通字符对待。将如下所示的FILE_CHAR_TEST()宏:
#define FILE_CHAR_TEST(c, mask) \
((opt.restrict_files_nonascii && !c_isascii ((unsigned char)(c))) || \
(filechr_table[(unsigned char)(c)] & (mask)))
修改為:
#define FILE_CHAR_TEST(c, mask) \
(((opt.restrict_files_nonascii && !c_isascii ((unsigned char)(c))) || \
(filechr_table[(unsigned char)(c)] & (mask))) \
&& !((c|0x0fffffff) == 0xffffffff)) /* 排除中文 */
原文地址:http://www.linux-ren.org/modules/newbb/viewtopic.php?topic_id=53634