注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Nihui's Blog

nihui的私人空间和日志

 
 
 

日志

 
 

写了第一个真正意义上的补丁  

2007-08-12 15:41:00|  分类: magic 栏 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        为了我可爱的 enule 下载,便装了 mldonkey 和 kmldonkey,可是 kmldonkey 却有个非常大的缺陷,就是“共享文件”列表中的文件名会乱码。。
        其实说起来,在 linux 下用电骡还是 amule 最好,但是 wx 却是 utf8 内建的,amule 全部都是用 utf8 编码处理文件的,而 Magic Linux 的 locale 却是 gb18030 的,所以下载下来的文件名会乱码,需要 convmv 转换。转换之后,文件名是对了,但是在 amule 中却又成乱码了(amule 把 gb18030 的文件名当做 utf8 识别了)。sjsk 虽然想到用脚本,在启动 amule 的时候全部转换成 utf8,关闭 amule 的时候转换为 gb18030,但是如果同时开着 amule,又要进行文件操作就没办法了────总有一个地方会乱码。。
        mldonkey 用起来就没这个问题了,但是其前端之一 kmldonkey 却有问题了。在获取共享文件的文件名时,它会自动识别 locale,然后把文件名当做 locale 的编码识别,比如它把文件名的编码认为是 gb18030,这本来是挺好的,但是下一步它会把这个文件名转换为 utf8 来显示出来。这里有个规定,就是 Qt 程序只允许使用 utf8 编码来显示多国字符,这样一来,原本 gb18030 正确的文件名经“转换”后又变成了乱码。。
        我这个补丁就是为了欺骗一下电脑了。明明 locale=gb18030,却硬是要它认作 utf8 编码的文件名,这样子就能直接显示出来“正确”的文件名来了~
        如果诸位以后能用上 Magic Linux 2.1 的话,就再也不会看见 kmldonkey 中的乱码了哦~~    先感谢我吧~

当然喽~这个补丁是 GPLv2 协议发布的,在此公布源代码吧~

diff -Nur kmldonkey-0.10.1/src/libkmldonkey/shareinfo.cpp kmldonkey-0.10.1/src/libkmldonkey/shareinfo.cpp
--- kmldonkey-0.10.1/src/libkmldonkey/shareinfo.cpp    2005-07-27 00:40:35.000000000 +0800
+++ kmldonkey-0.10.1/src/libkmldonkey/shareinfo.cpp    2007-08-12 10:02:15.000000000 +0800
@@ -26,6 +26,7 @@
 
 #include <qfile.h>
 #include <qregexp.h>
+#include <qtextcodec.h>
 
 ShareInfo::ShareInfo(DonkeyMessage* msg, int proto)
 {
@@ -33,7 +34,12 @@
     network = msg->readInt32();
     QByteArray ba = msg->readByteArray();
     ba.resize(ba.size() + 1); ba[ba.size()-1] = 0;
-    name = QFile::decodeName( QCString( ba.data(), ba.size() ) ); // the file is locally encoded
+
+    //QString filenameshared = QFile::decodeName( QCString( ba.data(), ba.size() ) );
+    QTextCodec* codec = QTextCodec::codecForName("utf8");
+    //QString filenameshared_utf8 = codec->toUnicode( QCString( ba.data(), ba.size() ) );
+    name = codec->toUnicode( QCString( ba.data(), ba.size() ) );
+    //name = codec->fromUnicode( filenameshared_utf8 ); // the file is locally encoded
     size = msg->readInt64();
     uploaded = msg->readInt64();
     requests = msg->readInt32();

  评论这张
 
阅读(510)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017