Delphi中處理漢字的方法

在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函數博文.

發佈了28 篇原創文章 · 獲贊 6 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章