MLDonkey 下载中文文件乱码解决办法
作者:kongxx
MLDonkey是目前在Linux上比较流行的Donkey,但是其核心类库不能很好的处理中文,这一点也让很多中国的养驴专业户望而却步,以下是我在使用MLDonkey的过程中处理文件有中文的一个方法,但是此方法只是在文件下载完后执行转换,在下载过程中仍然不能看到中文,这一点我会在以后想办法处理:
此方法使用的是Java语言编写的一个类作的处理,代码如下:
import java.net.*;
import java.io.*;
public class MLDonkeyUtil {
/**
* mldonkey文件下载存放路径
*/
private String incoming = "/usr/local/mldonkey/incoming";
public static void main(String[] args) throws Exception {
MLDonkeyUtil util = new MLDonkeyUtil();
util.convert();
}
private void convert() {
File dir = new File(incoming);
File[] files = dir.listFiles() ;
for(int i = 0 ; i < files.length ; i++) {
String strDest = convert(files[i].getName());
if(!files[i].getName().equals(strDest)) {
print(files[i].getName() + " >>> " + strDest);
File fDest = new File(files[i].getParent() + File.separator + strDest);
files[i].renameTo(fDest) ;
}
}
}
private String convert(String s) {
int location = 0;
String ret = "";
while(true) {
if(location + 8 <= s.length() ) {
String subStr = s.substring(location ,location + 8);
if(check(subStr)) {
ret += "%" + convert2Hex(subStr.substring(1, 4)) + "%"
+ convert2Hex(subStr.substring(5, 8));
location = location + 8 ;
} else {
ret += s.substring(location ,location + 2);
location = location + 1;
}
} else {
ret += s.substring(location );
break ;
}
location ++ ;
}
return URLDecoder.decode(ret) ;
}
/**
* 检查匹配类型(_nnn_nnn)
* @param s
* @return
*/
private boolean check(String s) {
if(s.length() != 8) {
return false ;
}
if(s.charAt(0) != '_' || s.charAt(4) != '_') {
return false ;
}
if( isNum(s.charAt(1)) && isNum(s.charAt(2)) && isNum(s.charAt(3))
&& isNum(s.charAt(5)) && isNum(s.charAt(6)) && isNum(s.charAt(7))) {
return true ;
}
return false ;
}
private boolean isNum(char c ) {
if(c >= 48 && c <= 57) {
return true ;
}
return false ;
}
private String convert2Hex(String s) {
int i = Integer.parseInt(s);
if(i < 0 || i > 255) {
throw new IllegalArgumentException();
}
return Integer.toHexString(i);
}
private void print(String str) {
System.out.println(str);
}
}
将此类中的incoming 改为MLDonkey incoming目录,然后再Linux命令行输入以下命令进行编译和执行。
编译
#javac MLDonkeyUtil.java
执行
#java MLDonkeyUtil
如果目录下有需要改中文名的文件,此程序会自动转换,并输出转换前后文件的名称。