可以用api函数来解决这个问题 函数名:Long IsDBCSLeadByte ( char bTestChar ) 功能:判断字符是否dbcs引导字节 如果返回1,表示是汉字中的半个字节,如果返回0,表示是英文字符前几天刚解决了这个问题,字符串中可以使中英文结合的,这是在pb下的一段代码,可以参考一下,长度可以根据自己的情况确定 vlcount = 0 for i = 1 to 255 //截取字符串的前255个字符 vsbyte = mid(vsgssm,i,1) //取出第i个字符 k = IsDBCSLeadByte(vsbyte) //判断是否汉字的半个字节 if k = 1 then vlcount = vlcount + 1 end if nextif mod(vlcount,2) = 1 then //因为最后得到的汉字的半个字节的个数是奇数,所以最后一个字符肯定是乱码,去掉它 vlong = 254 else vlong = 255 end if vsstr = mid(vsgssm,1,vlong) messagebox('',vsstr)
汉字内码
内码: Ord(strHZ[1])*$100 + Ord(strHZ[2])输入一个汉字得到是它的内码,由两个字节组成,两个字节分别减去A0H(160),得到的前一个字节是区,后一个字节是位,算该字在16点阵字库中的位置时,((区-DD)*98+位)*32,32指每个16点阵汉字32字节.注意:有些字库前16区省略一些无用的区故要减去DD.公式给的不一定完全正确,汉字2312的字库是87区,每区94个汉字,1-9区是标点,制表符号,日文X假名等,10-15空,16-55是汉字一级字库(常用),5590-5594空.56区到87区是二级字库.共6763个中文.16*16点阵字库就是32字节一个字.但不同的16*16点阵字库的排列方法不一定一样,如UCDOS和CCDOS,有的还把10-15区空的压缩了.机内码就是你在DELPHI中获得的输入的汉字字符.比如:"啊"的16进制表示.区码 := (机内码高8位-$A0);位码 := (机内码低8位-$A0);偏移量 := ((区码-1)*94+(位码-1))*32注意区码和位码是以1为开始的.
函数名:Long IsDBCSLeadByte ( char bTestChar )
功能:判断字符是否dbcs引导字节
如果返回1,表示是汉字中的半个字节,如果返回0,表示是英文字符前几天刚解决了这个问题,字符串中可以使中英文结合的,这是在pb下的一段代码,可以参考一下,长度可以根据自己的情况确定
vlcount = 0
for i = 1 to 255 //截取字符串的前255个字符
vsbyte = mid(vsgssm,i,1) //取出第i个字符
k = IsDBCSLeadByte(vsbyte) //判断是否汉字的半个字节
if k = 1 then
vlcount = vlcount + 1
end if
nextif mod(vlcount,2) = 1 then //因为最后得到的汉字的半个字节的个数是奇数,所以最后一个字符肯定是乱码,去掉它
vlong = 254
else
vlong = 255
end if
vsstr = mid(vsgssm,1,vlong)
messagebox('',vsstr)