如何获得指定位置之前的一个完整字符?
  在一个单字节和双字节组合的字串中,如"中国1我en人民",类型为string型。现在要取第8个(是string类型的第8个)之前的1个字符(这个字符可能是单字节,也可能是双字节),如何取?
  也就是说:我想取出指定位置之前的一个字符!

解决方案 »

  1.   

    //  mbLeadByte: 汉字的第一个字节
        mbTrailByte: 汉字的第二个字节
        mbSingleByte: 单个的字符,不是中文字符。
      var
      s:string;
      i:integer;
    begin
      s:='中国1我en人民';
      i:=pos('我',s );
      case ByteType( s,i-1) of
        mbSingleByte:showmessage( copy( s,i-1,1 ) );
        mbLeadByte:  showmessage( copy( s,i-1,2) );
        mbTrailByte: showmessage( copy( s,i-2,2 ) );
      end;
      

  2.   

    谢谢回复!
        不过有个疑问:mbLeadByte:  showmessage( copy( s,i-1,2) ); 这句是从指定位置的前一个字节开始复制,复制2字节的内容?这不是将指定位置的字节也复制了?
        
        是不我搞错了,我想的是System.Copy?
        让我看看copy的vcl源码!
      

  3.   

    写错了 应该是这样
      case ByteType( s,i-1) of
        mbSingleByte:showmessage( copy( s,i-1,1 ) );
        mbLeadByte:  showmessage( copy( s,i-1,2) );
        mbTrailByte: showmessage( copy( s,i,2 ) );
      end;
      

  4.   

    WideStringcopy的第三个参数都用1就行了
      

  5.   

    我知道用WideString简单,但有时候我们要处理的是String类型,所以我才提问。
       hongqi162(失踪的月亮) 的方法很不错,测试成功。
       给分!