判断是否输入的是中文时遇到的问题?
我用以下代码判断str中是否存在非中文的字符,在使用过程中基本没有问题,但当我输入的是“丢”字时,程序判断ord(str[2])=71。我实在不明白是为什么?难道我以下判断中文的方法有错??请高手指教。
begin
  flag :=true;
  str:=trim(dbedit1.text);
  for i:=1 to length(str) do
  begin
    if (ord(str[i])>=33) and (ord(str[i])<=126) then
    begin
       application.MessageBox('你输入的非法字符!!','提示',MB_ICONINFORMATION + MB_OK);
       flag:=false;
       break;
    end
  end;

解决方案 »

  1.   

    判断应该有错吧。判断中文的应该是if (ord(str[i])>=127) then这个是if (ord(str[i])>=33) and (ord(str[i])<=126) then 字符的啊。
      

  2.   

    补充说明:
      当我让str=一个中文字,如“丙”或“丢”时,length(str)都等于2。
    于是用(ord(str[i])>=127) 判断中文。结果如下:
       “丙”字的ord(str[1])=177,ord(str[2])=251。
        可到了“丢”字,问题就出现了:
        ord(str[1])=129
        ord(str[2])=71。//这里为什么会出现71!!!!!他不是应该比126大的数么???
        那我要判断所输入的是不是中文,应该怎么办呀!!!
      

  3.   

    var ans : AnsiString;
        wis : WideString;
        sub : Integer; //汉字的个数
    Begin
      ans := '盗版delphi';
      wis := WideString( ans );
      sub := Length( ans ) - Length( wis );
    End;
      

  4.   

    类型的问题.str:widestring;str[2]应该是第一个汉字的右半部份.