荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: jjk (kernel), 信区: InstallBBS
标 题: [BUG]FB2K BIG5<->GB内码转换输入BUG及参考解决[fwd]
发信站: 荔园晨风BBS站 (Sat Mar 2 21:23:41 2002), 转信
【 以下文字转载自 jjk 的信箱 】
【 原文由 2k.bbs@bbs.nju.edu.cn 所发表 】
发信人: fishchen..bbs@bbs.whu.edu.cn, 原信区: BBSDev
标 题: [BUG]FB2K BIG5<->GB内码转换输入BUG及参考解决[fwd]
发信站: 真茹BBS站 (Sat Mar 2 17:06:32 2002)
转信站: WHUBBS!thunews.dhs.org!jnunews.dhs.org!Zhenru
[BUG]FB2K BIG5<->GB内码转换输入BUG及参考解决
现象: 在BIG5码环境下输入BIG5码的字符时,
不能把所输入的数据正确的转换成系统所要的
GB码.在一般的输入状态不能正确转码,但用CTERM
的输入条和文章输入栏写入再输入就正常.
原因: 汉字是双字节啦,而且由于网络传输的问题,经常会
把两个字节分开了传送.所以就会这样了:>
参考解决: (文中所指的程序文件均为FB2000v1219中和源程序,
并使用BBSD方式,在不使用BBSD方式时,请参考解决)
io.c
增加big2gb()函数;
修改程序中使用到read2()处;
<主要在igetch()中,在igetkey()中使用read2()可改可不改>
参考程序:
1.================
// BIG5==>GB 转换,参考FB2000的read2()写成
int big2gb(char *str, int len, int *havebad)
{
register unsigned char ch1,ch2, *ptr;
register int locate, i=0;
if(len == 0) return 0;
if( len < 1) return len;
*havebad=0;
for(i=0,ptr = str; i < len; i++) {
ch1 = (ptr+i)[0];
if(ch1 < 0xA1 || ch1 == 0xFF) continue;
if (i>=len-1) {
*havebad=1;
break;
}
ch2 = (ptr+i)[1];
i ++;
if(ch2 < 0x40 || ( ch2 > 0x7E && ch2 < 0xA1 ) || ch2 == 255)
continue;
if( (ch2 >= 0x40) && (ch2 <= 0x7E) )
locate = ((ch1 - 0xA1) * 157 + (ch2 - 0x40)) * 2;
else
locate = ((ch1 - 0xA1) * 157 + (ch2 - 0xA1) + 63) * 2;
(ptr+i-1)[0] = BtoG[ locate++ ];
(ptr+i-1)[1] = BtoG[ locate ];
}
return len;
}
2.=================
将在igetch()中使用read2()中的那个for循环改为:
// 之前声明
// int big2gb_havebad, lastget;
big2gb_havebad=0;
lastget=0;
ch=0;
for (;;) {
lastget = read(0, data+ch, IBUFSIZE-ch);
ch=lastget+ch;
if( convcode ) {
if (big2gb_havebad==0) {
big2gb(data+ch-lastget, lastget, &big2gb_havebad);
} else {
big2gb(data+ch-lastget-1, lastget+1, &big2gb_havebad);
}
}
if (lastget>0 && big2gb_havebad!=0) continue;
if (lastget>0) break;
if (lastget<0 && errno == EINTR) continue;
abort_bbs();
}
--
fishchen
小瑜鱼 @ 暨南园
fishchen@cnhelp.net
※ 修改:·fishchen 於 03月02日17:05:34 修改本文·[FROM: 暨大真茹19]
※ 来源:·真茹BBS站 jnubbs.dhs.org·[FROM: 暨大真茹19]
--
※ 修改:·fishchen 於 03月02日17:06:30 修改本文·[FROM: 暨大真茹19]
※ 转载:·真茹BBS站 jnubbs.dhs.org·[FROM: 暨大真茹19]
--
※ 转寄:.南京大学小百合站 bbs.nju.edu.cn.[FROM: 深圳大学BBS]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店