MLDonkey 下载中文文件乱码解决办法

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 + 1);

location = location + 1;

}

} else {

ret += s.substring(location );

break ;

}

}

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

如果目录下有需要改中文名的文件,此程序会自动转换,并输出转换前后文件的名称。

你可能感兴趣的:(key)