Q:天软中如何正确判断中文(汉字)字符串?
说明:天软是GBK编码,一个汉字占两个字节,用常用的普通字符串函数来判定一个汉字,可能会造成误判,这时,我们需要用
多字节语言支持函数来实现。
该类函数的位置:天软帮助文档(F1)中天软金融分析.NET函数大全>字符串函数>多字节语言支持函数
在多字节语言支持函数中
按多字节计算,即一个汉字当一个字符,用lengthw函数计算长度,用Ansipos判断汉字所在位置或是否存在。
而普通字符串函数则是
按字节计算,一个汉字算两个字符,用length函数计算长度,用pos/copy等判断字符串位置或取子串。
范例:
s:='TSL天软';
a:=Pos('软',s);
b:=copy(s,2,4);
c:=length(s);
d:=Ansipos('软',s);
e:=midstr(s,2,4);
f:=lengthw(s);
return array('普通字符串函数':('软字开始位置':a,'第2个位置起数4个':b,'字符串长度':c),
'多字节语言支持函数':('软字开始位置':d,'第2个位置起数4个':e,'字符串长度':f));
//返回
错误应用场景:
s:='和顺电气';
return Pos('退',s);
//返回2
问题:从这两句代码的结果返回我们看出,这个结果明显是不对的,s字符串中不存在’退’这个汉字,那么,原因是什么呢?如何解决?
原因:pos函数中,按字节进行判断,s字符串中’和’这个汉字的第二个字符和’顺’的第一个字符组成起来就是’退’,所以判断’退’在s字符串中的第二个字符位置。
解决办法:将pos改为AnsiPos即可。
s:='和顺电气';
return AnsiPos('退',s);
//返回0