中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 综合文章
MLDonkey 下载中文文件乱码解决办法
作者:未知 时间:2005-07-27 22:47 出处:CSDN 责编:chinaitpower
              摘要: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 + 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

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


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有