Delphi中处理汉字的方法

来源:互联网 发布:vb叶轮 编辑:程序博客网 时间:2024/05/16 11:04

在Delphi中一个汉字占两个字节,各种字符串处理函数,直接处理字符串中汉字时经常会发生乱码或不显示。我在处理时也是弄了半天,到处找资料,一下是找到的几种处理方法。在Delphi7下测试通过。

一.中文所用的字符全是双字节字符,英文所用的字节全是单字节字符,也就是mbSingleByte。本实例是用ByteType()函数返回字符串指定位置上的字符,如果不是mbSingleByte,则表示为双字节字符。主要代码如下:

 procedure TForm1.Button1Click(Sender: TObject);
    var
     s,s1: String;
     i : Integer;
    begin
     s := Edit1.Text;
     i := 0;
     while i<Length(s) do
     begin
      if (ByteType(S,i) <> mbSingleByte) then
      begin
       s1 := s1+ Copy(s,i,2)+' ';
       i := i+2;
      end
      else
       i:= i+1;
     end;
     Label2.Caption := Trim(s1);
    end;

二.本实例是用Length()函数来获取字符串的长度,用Ord()函数来获取每个字符的ASCII码,当ASCII码的值大于$7F时,表示该字符是汉字的前一个字节,并用Copy()函数来获取当前的汉字。主要代码如下:

procedure TForm1.Button2Click(Sender: TObject);
 var
     str,s,sj: String;
     i: integer;
    begin
     str := trim(Edit1.Text);
     i := 0;
     while i< Length(str) do
     begin
      if ord(str[i]) > $7F then
      begin
       s := Copy(str,i,2);
       sj :=sj+ '"'+s+'"';
       i := i+2;
      end
      else  i:=i+1;
     end;
     Label2.Caption := '在字符串中含有汉字'+sj;
    end;
三用widestring类型。widestring处理汉字时汉字按一个字符算。代码如下:

procedure TForm1.Button3Click(Sender: TObject);
var
  str:string;
  badword,filtstr:widestring;
  filtcount,i:integer;
  msg:widestring;
 begin
  msg:=edit1.Text;
  for i:=1 to length(msg) do
   begin
     if Pos((msg[i]),filtstr)<>0 then
        begin
          badword:=badword+msg[i]+',';
          msg:=StringReplace(msg,msg[i],'*', []);
          filtcount:=filtcount+1;
        end;
   end;
   showmessage(msg);
 end;

四.用Windows.IsDBCSLeadByte函数处理。详细使用见IsDBCSLeadByte函数博文.