llc 发表于 2004-12-29 12:58:42

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

昨晚安装了ml1.2rc1,发现自带的gftp在进入本地中文路径时(远程中文路径没测试,估计有同样的毛病),最下方的log信息窗口输出信息乱码,下载最新版本,发现仍然有这毛病,粗略看了一下源码,作了些修改
晚上再看源码,看有没有彻底点的修改方法

pupilzeng 发表于 2004-12-29 13:54:15

有时间的话,修正一下这个bug
http://bugzilla.gnome.org/show_bug.cgi?id=156371
我是这个bug的reporter,可惜这个bug还没有人去确认,只有两个人说也遇到过这个问题

llc 发表于 2004-12-29 14:46:30

有时间的话,修正一下这个bug
http://bugzilla.gnome.org/show_bug.cgi?id=156371
我是这个bug的reporter,可惜这个bug还没有人去确认,只有两个人说也遇到过这个问题
OK,晚上测试一下,不知道ml有没有自带ftpd,没有的话还得自己搞个来测试

KanKer 发表于 2004-12-29 15:00:33

没带ftpd。随便弄个proftd或vsftpd装上就行了

llc 发表于 2004-12-29 18:44:26

有时间的话,修正一下这个bug
http://bugzilla.gnome.org/show_bug.cgi?id=156371
我是这个bug的reporter,可惜这个bug还没有人去确认,只有两个人说也遇到过这个问题
能举个具体的例子不?我这里好象没有那种编码的文件名文件,没法测试

sunmoon1997 发表于 2004-12-29 19:19:54

已经有人写过补丁了, 就在自由软件里:)

pupilzeng 发表于 2004-12-29 20:53:46

已经有人写过补丁了, 就在自由软件里:)

对,就是这个补丁,不过现在我还正在编译,还没有测试http://www.linuxfans.org/nuke/modules.php?name=Site_Downloads&op=geninfo&did=3120

pupilzeng 发表于 2004-12-29 21:07:19

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

冰寻 发表于 2004-12-29 21:59:12

好啊
这么多,高人啊 :mrgreen:

limit 发表于 2004-12-29 22:05:45

王者归来 :evil:

樱家冢 发表于 2004-12-29 22:32:12

llc再现……
王者归来……
:mrgreen:

llc 发表于 2004-12-29 23:00:27

呵呵,路过,纯属路过
友情客串一下

bamfox 发表于 2004-12-30 01:59:05

:twisted:

xLoneStar 发表于 2004-12-31 22:36:14

本地文件名的编码应遵循 G_FILENAME_ENCODING 环境变量的指示。

llc 发表于 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代码如下:(这个补丁应该可以配合上面提到的那个补丁一起作用)

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)
   {

页: [1]
查看完整版本: 修正gftp的一个中文显示小bug