QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1215|回复: 14

修正gftp的一个中文显示小bug

[复制链接]
发表于 2004-12-29 12:58:42 | 显示全部楼层 |阅读模式
昨晚安装了ml1.2rc1,发现自带的gftp在进入本地中文路径时(远程中文路径没测试,估计有同样的毛病),最下方的log信息窗口输出信息乱码,下载最新版本,发现仍然有这毛病,粗略看了一下源码,作了些修改
晚上再看源码,看有没有彻底点的修改方法

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2004-12-29 13:54:15 | 显示全部楼层
有时间的话,修正一下这个bug
http://bugzilla.gnome.org/show_bug.cgi?id=156371
我是这个bug的reporter,可惜这个bug还没有人去确认,只有两个人说也遇到过这个问题
回复

使用道具 举报

 楼主| 发表于 2004-12-29 14:46:30 | 显示全部楼层
[quote:92e3770123="pupilzeng"]有时间的话,修正一下这个bug
http://bugzilla.gnome.org/show_bug.cgi?id=156371
我是这个bug的reporter,可惜这个bug还没有人去确认,只有两个人说也遇到过这个问题[/quote]
OK,晚上测试一下,不知道ml有没有自带ftpd,没有的话还得自己搞个来测试
回复

使用道具 举报

发表于 2004-12-29 15:00:33 | 显示全部楼层
没带ftpd。随便弄个proftd或vsftpd装上就行了
回复

使用道具 举报

 楼主| 发表于 2004-12-29 18:44:26 | 显示全部楼层
[quote:79ae7ffc23="pupilzeng"]有时间的话,修正一下这个bug
http://bugzilla.gnome.org/show_bug.cgi?id=156371
我是这个bug的reporter,可惜这个bug还没有人去确认,只有两个人说也遇到过这个问题[/quote]
能举个具体的例子不?我这里好象没有那种编码的文件名文件,没法测试
回复

使用道具 举报

发表于 2004-12-29 19:19:54 | 显示全部楼层
已经有人写过补丁了, 就在自由软件里:)
回复

使用道具 举报

发表于 2004-12-29 20:53:46 | 显示全部楼层
[quote:5c6b263157="sunmoon1997"]已经有人写过补丁了, 就在自由软件里:)
[/quote]
对,就是这个补丁,不过现在我还正在编译,还没有测试http://www.linuxfans.org/nuke/modules.php?name=Site_Downloads&op=geninfo&did=3120
回复

使用道具 举报

发表于 2004-12-29 21:07:19 | 显示全部楼层
[quote:37a4ece56b="llc"][quote:37a4ece56b="pupilzeng"]有时间的话,修正一下这个bug
http://bugzilla.gnome.org/show_bug.cgi?id=156371
我是这个bug的reporter,可惜这个bug还没有人去确认,只有两个人说也遇到过这个问题[/quote]
能举个具体的例子不?我这里好象没有那种编码的文件名文件,没法测试[/quote]
如果你的locale是utf-8的话,随便拿个locale为gbk的中文ftp
然后下载/上传中文名文件
1.下载到fat分区(使用iocharset=utf-8 mount的),会发现没法下载
2.下载到ext2/3,reiserfs等格式的分区,会发现文件名为乱码
回复

使用道具 举报

发表于 2004-12-29 21:59:12 | 显示全部楼层
好啊
这么多,高人啊
回复

使用道具 举报

发表于 2004-12-29 22:05:45 | 显示全部楼层
王者归来
回复

使用道具 举报

发表于 2004-12-29 22:32:12 | 显示全部楼层
llc再现……
王者归来……
回复

使用道具 举报

 楼主| 发表于 2004-12-29 23:00:27 | 显示全部楼层
呵呵,路过,纯属路过
友情客串一下
回复

使用道具 举报

发表于 2004-12-30 01:59:05 | 显示全部楼层
回复

使用道具 举报

发表于 2004-12-31 22:36:14 | 显示全部楼层
本地文件名的编码应遵循 G_FILENAME_ENCODING 环境变量的指示。
回复

使用道具 举报

 楼主| 发表于 2005-1-6 16:31:05 | 显示全部楼层
试用了一下
http://www.linuxfans.org/nuke/modules.php?name=Site_Downloads&op=geninfo&did=3120
这个补丁
发现没有对我原先提到的那个问题作出修正,反而更严重了,表现为log信息里如果包含有非utf8编码的信息时,log信息完全无法输出,也就是说,进入本地中文目录、创建本地中文目录、删除本地中文目录时,log窗口没有相应的log信息显示

原先打算在每个logging_function调用时将argp参数转换成utf8编码进行再进行输出,发现logging_function调用很多,逐个修改太麻烦;后来发现,原来在gftp的log输出里,无论是将log信息输出到log窗口,还是输出到log文件里,最后都是通过misc-gtk.c里的ftplog函数进行
其中的string变量为utf8编码,当argp不为utf8编码时(譬如本地中文目录的操作,本地中文目录通常为gbk编码),logstr = va_arg (argp, char *)或logstr = g_strdup_vprintf (string, argp)后的logstr为一混合编码(utf8+locale)的字符串,其下面的gftp_string_to_utf8函数会将这混合编码的字符串全部当作非utf8编码而进行utf8编码转换,结果就造成了乱码
解决方法:先将string转换成locale编码,从而当logstr = va_arg (argp, char *)或logstr = g_strdup_vprintf (string, argp)后,logstr字符串为统一的locale编码,这样gftp_string_to_utf8函数会将整个字符串判断为非utf8编码进行转换,转换后的utf8编码字符串就能正确显示出来

patch代码如下:(这个补丁应该可以配合上面提到的那个补丁一起作用)
[code:1]
diff -U 3 -H -d -r -N -- gftp-2.0.18rc1-org/src/gtk/misc-gtk.c gftp-2.0.18rc1/src/gtk/misc-gtk.c
--- gftp-2.0.18rc1-org/src/gtk/misc-gtk.c 2004-11-07 07:53:52.000000000 -0500
+++ gftp-2.0.18rc1/src/gtk/misc-gtk.c 2005-01-05 15:22:10.000000000 -0500
@@ -56,6 +56,9 @@
   char *utf8_str;
#endif

+  if ( request != NULL )
+   string=g_locale_from_utf8(string,-1,NULL,NULL,NULL);
+
   va_start (argp, string);
   if (strcmp (string, "%s") == 0)
     {

[/code:1][/code]
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-26 22:46 , Processed in 0.053331 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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