Delphi POS函数中文处理的问题

作者: 傻猫    分类: 搞软件     发布时间: 03-01 13:45    浏览次数: 13124     3 条留言

delphi漏洞 pos()函数的奇怪现象

edit1.Text := intToStr(pos('市',资中市'));
结果=5,正确.

edit1.Text := intToStr(pos('市','资兴市'));
结果=2 . -_-?

edit1.Text := intToStr(pos('市','湖南省郴州市资兴市'));
结果=11,正确.

edit1.Text := intToStr(pos('市','湖南省资兴市郴州市'));
结果=8 . -_-?

以上结果都进行调试过,有没高手知道为什么会这样的?

---------------------------------------------

因为“资”的后半部分加上“兴”的前半部分就是“市”。
s1:='资';
s2:='兴';
ShowMessage(s1[2]+s2[1]);

不是漏洞,是由于汉字由两个字节组成的,使用WideString就Ok了
试试看:
edit1.Text := intToStr(pos('市',WideString('资中市')));
//结果=3,正确.

edit1.Text := intToStr(pos('市',WideString('资兴市')));
//结果=3

Tags: delphi, pos

已有 3 条评论 »

  1. Ev1n

    理论上资兴市的市也应该算上是第5个位置,每个汉字2字节嘛

  2. Ev1n

    最好指明存在问题的Delphi版本,否则初学者很容易理解不好。呵呵,希望Delphi 2009/2010没有这个问题。

    1. Ev1n

      我用的Delphi7,用WideString就没有这个问题了。

添加新评论