|
楼主 |
发表于 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] |
|