QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5161|回复: 28

0.2 在 MagicLinux 上下载的文件名为乱码

[复制链接]
发表于 2005-12-8 22:07:26 | 显示全部楼层 |阅读模式
因为 Magic 的 locale 是 gb18030 ,所以希望 btstormlite 能在保存时做一下从 utf8 到 locale 的转换  
发表于 2005-12-8 22:21:51 | 显示全部楼层
OK,谢谢提醒
回复

使用道具 举报

 楼主| 发表于 2005-12-8 23:22:44 | 显示全部楼层
哈哈,如果你明天能做好,俺就直接集成到 rc2 里了
回复

使用道具 举报

发表于 2005-12-9 13:30:10 | 显示全部楼层
啊~~~
俺今天下班后晚上八点才到家,4个小时,有难度
能不能宽限点时间?
回复

使用道具 举报

 楼主| 发表于 2005-12-9 14:23:12 | 显示全部楼层
周日前吧,霍霍。周日没问题的话便要发布 rc2 了  
回复

使用道具 举报

发表于 2005-12-9 14:26:30 | 显示全部楼层

谢谢~
回复

使用道具 举报

 楼主| 发表于 2005-12-9 16:15:19 | 显示全部楼层
如果能再加上限制上传下载速度上限的功能就好了。不然打开后若下载或上传速度太快会拖跨整个局域网
回复

使用道具 举报

发表于 2005-12-9 17:17:59 | 显示全部楼层
嗯,俺测试程序时经常影响GF打网络斗地主
列入0.3计划
回复

使用道具 举报

发表于 2005-12-9 17:20:25 | 显示全部楼层
嗯,俺测试程序时经常影响GF打网络斗地主
列入0.3计划
回复

使用道具 举报

发表于 2005-12-9 18:05:32 | 显示全部楼层
GTK/GNOME程序不应该使用locale2utf或者反向转换。按照gtk的文档,应该遵从G_FILENAME_ENCODING这个环境变量的设置。
回复

使用道具 举报

发表于 2005-12-9 18:08:17 | 显示全部楼层
嗯,我会用g_filename_from_utf8
回复

使用道具 举报

发表于 2005-12-10 00:01:52 | 显示全部楼层
搞定了,现在UTF-8\GB2312\GBK\GB18030\BIG5通吃  
请KanKer兄帮忙测试
谢谢~
http://www.socks5cn.com/bitstorm/BitStormLite-0.2a.tar.gz
回复

使用道具 举报

 楼主| 发表于 2005-12-10 14:19:09 | 显示全部楼层
果然没有问题了,感谢 gxcooo 兄
为避免每次都选择编码,俺做了个自动选择编码的补丁,因不熟悉 gtk ,所以用比较笨的方法实现,补丁如下:
[code:1]
--- BitStormLite-0.2a/src/NewTaskWindow.h.autoencoding        2005-12-09 15:35:43.000000000 +0000
+++ BitStormLite-0.2a/src/NewTaskWindow.h        2005-12-10 16:24:14.000000000 +0000
@@ -30,6 +30,7 @@
        std::string getUserInputDestPath(const char* fileName);
        void updateSelectedSize();
        void updateEncoding();
+        int get_gtk_combo_box_index();
       
        static void toggle_event(GtkCellRendererToggle*cell_renderer, gchar *path, gpointer user_data);
        static void select_dir_event(GtkWidget* widget, gpointer data);
--- BitStormLite-0.2a/src/NewTaskWindow.cpp.autoencoding        2005-12-09 15:54:56.000000000 +0000
+++ BitStormLite-0.2a/src/NewTaskWindow.cpp        2005-12-11 03:49:24.000000000 +0000
@@ -18,6 +18,8 @@
        NULL
};

+const int NUM_ENCODINGS=4;
+
enum
{
        ID_COLUMN,
@@ -154,7 +156,7 @@
                gtk_combo_box_insert_text(GTK_COMBO_BOX(_encodingComboBox), 0, encodings[i]);               
                i++;
        }
-        gtk_combo_box_set_active (GTK_COMBO_BOX(_encodingComboBox), 0);
+        gtk_combo_box_set_active (GTK_COMBO_BOX(_encodingComboBox), get_gtk_combo_box_index());/*set GTK_COMBO_BOX's index as locale*/
       
        g_signal_connect(G_OBJECT(_encodingComboBox), "changed", G_CALLBACK(encoding_changed), this);
                       
@@ -347,3 +349,21 @@
        }               
}

+int CNewTaskWindow::get_gtk_combo_box_index()
+{
+        char *env;
+        env=getenv("LANG");
+        if (env!=NULL){
+                env=strchr(env,46);/*search '.' in LANG*/
+                if (env!=NULL){
+                        env=env+1;
+                        int i = 0;
+                        while(encodings[i] != NULL){
+                                if (strcmp(env,encodings[i])==0)
+                                        return NUM_ENCODINGS-i;
+                                i++;
+                        }
+                }
+        }
+        return 0;
+}
[/code:1]

rpm 包下载地址:
http://www.magiclinux.org/people/kanker/os/rpms/BitStormLite-0.2a-1mgc.i686.rpm
源包:
http://www.magiclinux.org/people/kanker/os/srpms/BitStormLite-0.2a-1mgc.src.rpm
回复

使用道具 举报

发表于 2005-12-10 17:17:47 | 显示全部楼层
to KanKer:
那个编码方式选择是指选择Torrent文件里字符串(文件名等)的编码方式,
运行机器上的locale并不一定就和Torrent编码一致。

我的机器是用的zh_CN.UTF-8,
按照上面的patch,使用UTF-8解码GBK编码的torrent解码不会得到正确结果


btw, BitStorm0.2会在MagicLinux 2.0RC2里吗?俺比较关心这个
回复

使用道具 举报

 楼主| 发表于 2005-12-10 22:10:12 | 显示全部楼层
按道理,在 torrent 文件里,每个字段都是编码说明,bt 客户端应该自动读取并进行相应的转换。
gtk 读取后的编码应该默认是 utf8,如果保存文件名到非 utf8 locale 的机器上便肯定是乱码。

你再测试一下看看吧,如果能做到直接读取 torrent 文件里的编码信息并自动转换而不用手动最好  

这个软件是要集成到 rc2 里啦。不过希望在 2.0 正式版出来前,能做到限速功能,这样用户使用起来就可以不用顾忌了  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-24 04:40 , Processed in 0.054579 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表