说道这个问题,比较郁闷。google一把,说是汉字的两个ASCII都是大于127的,于是我信了。按照各位大侠的办法写了一个过滤半个字的函数。但是不久以后我遇到了麻烦,有些汉字后面一个ASCII他就是小于127的,比如“玥”和“鵷”ASCII分别是AB 68和F9 74。用大侠们说得办法一过滤就剩下了68和74了。唉,不知道各位又什么看法。

解决方案 »

  1.   

    汉字是第一个字节大于127而已,可以用IsDBCSLeadByte来判断。LZ的过滤算法有问题。
      

  2.   

    使用Unicode编码字符var
      S: WideString;
      I: Integer;
    begin
      S := '我爱北京天安门!';
      for I := 1 to Length(S) do
        ShowMessage(S[I]);
    end;
      

  3.   

    汉字编码问题GB2312 的编码 汉字两字节都 >127但GBK 编码    第二个字节只要求 >$40
      

  4.   

    up.问楼上人一下,如果用UTF8或UTF16 来DECODE呢,这个对于汉字来说,该是怎样的?
      

  5.   

    不知道搂住用的什么标准的汉字编码?汉字的2个字节的ASCII码都应该是大于127的
      

  6.   

    如果是用DELPHI写Windows程序,用WideString吧
      

  7.   

    不明白楼主的意思,什么叫半年字?
    顺便给楼主提供一个有用的函数StrNextChar,中文会向后移动两个字节,包括你所说的“玥”和“鵷”,数字和字母移动一个字节.或许对你的过滤有用.
    var 
    p1:pchar;
    p2:pchar;
    s:string
    begin
      s:='玥鵷';
      p1:=pchar(s);
      p2:=StrNextChar(p1);
      showmessage(inttostr(p2-p1));
    end;
      

  8.   

    避免截取半个汉字看一下
    http://www.nhyz.org/molincie/systemgl/readnews.asp?newsid=11964