QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1938|回复: 3

gaim0.62-irc中文支持 bug修正

[复制链接]
发表于 2003-5-8 22:43:55 | 显示全部楼层 |阅读模式
gaim0.62登录公社的irc站,设置编码为GBK,登录后发现中文昵称好友不能列出,中文主题显示空白,中文昵称朋友说话时,前面的中文昵称看不见,用/nick命令重命名时,名字乱码,/list命令列出来的频道列表空白,/kick 中文昵称朋友T不了.

查看"gaim源码目录/src/protocols/irc.c"文件,发现作者在信息编码转换时考虑欠完全

(以公社irc为例,公社irc使用GBK编码处理和发送消息)
gtk2库内部使用utf8编码,在gtk2控件上显示的信息需要为utf8编码,对于普通的ascii编码,不需转换成utf8都能正常显示,但对于中文信息,必需转换成utf8编码,才能显示

作者在处理收到和发送的信息时,将信息拆分成几部分,包括who(昵称)和msg(谈话内容)等,使用了irc_send_convert和irc_recv_convert这两个函数来转换编码,将收到或发出的聊天消息(msg)转成用户指定的编码(譬如GBK)发送给服务器(服务器需要)或在当前窗口显示,但是,这两个函数只负责转换谈话的内容,而没有转换昵称(who),结果中文昵称从服务器得到后为GBK编码,程序没有做任何处理就添加到好友列表,结果由于是非utf8编码,显示成空白;同样的原因,/list得到的频道列表信息里有中文,GBK编码,没做任何处理列出得到空白;其他的不良现象原因都是一样

解决方法:在发送时将发送的utf8完整信息(包括who和msg等)完全转成gbk以便服务器处理,在接收信息时将得到完整的信息(包括who和msg等)转成utf8以便在各种控件上显示

修改irc_write函数,这个函数负责将完整的信息发送给服务器,修改这里,加入完全的编码转换;而irc_send_convert已经无用,因为所有的调用irc_send_convert函数其实都是先处理msg,然后加上who这些信息,最后调用irc_write发给服务器,既然irc_write已经修改,那irc_send_convert就无用(conv = g_iconv_open("UTF-8", "UTF-8");这句作用是从UTF8转成UTF8,相当于没作用)

irc_callback这个函数负责读取信息缓冲区(从服务器得到的)里的信息,然后提给irc_parse函数将信息拆分成几部分(who,msg),并分别处理(who没有进行编码转换);修改这个函数,让d=irc_recv_convert(data, d),将d这整条信息都转换成utf8编码,然后再提交给irc_parse处理

具体的修改还有其他地方的一些小修改,都是关于编码转换的,一一修改后,终于可以让gaim0.62的irc可以像以前的老版本一样工作了

感谢公社irc上dalin,x11,alces,樱家冢,itoy...等(排名不分先后 )一贯朋友一直对测试和调试工作给予配合和支持!

附上修改后的irc.c文件和贴图

本帖子中包含更多资源

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

×
发表于 2003-5-9 12:07:37 | 显示全部楼层

hehe,厉害

~~
回复

使用道具 举报

发表于 2003-5-9 20:45:16 | 显示全部楼层
gaim對utf8的處理確實不夠周密,沒有考慮到對CJK的支持,早在0.5x的時候,gaim是自己對utf8進行解碼,那時就沒有對3bytes的utf8處理對,後來改用iconv()來轉碼才好一點..
回复

使用道具 举报

发表于 2003-5-10 06:56:47 | 显示全部楼层
发布diff档案比较受欢迎也是传统方式,看的烦心!
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-15 23:49 , Processed in 0.075594 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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