您的位置:首页 > 其它

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

2005-07-13 09:12 519 查看
MLDonkey [/b]下载中文文件乱码解决办法[/b]
[/b]
[/b]作者:[/b]kongxx
[/b]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如果目录下有需要改中文名的文件,此程序会自动转换,并输出转换前后文件的名称。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: