DELPHI 中文处理

1.中文转拼音

 function   TForm1.yHzToPy(HZ:   string):   char;   
  begin   
      case   Word(HZ[1])shl   8+Word(HZ[2])   of   
          $B0A1..$B0C4:result:='A';   
          $B0C5..$B2C0:result:='B';   
          $B2C1..$B4ED:result:='C';   
          $B4EE..$B6E9:result:='D';   
          $B6EA..$B7A1:result:='E';   
          $B7A2..$B8C0:result:='F';   
          $B8C1..$B9FD:result:='G';   
          $B9FE..$BBF6:result:='H';   
          $BBF7..$BFA5:result:='J';   
          $BFA6..$C0AB:result:='K';   
          $C0AC..$C2E7:result:='L';   
          $C2E8..$C4C2:result:='M';   
          $C4C3..$C5B5:result:='N';   
          $C5B6..$C5BD:result:='O';   
          $C5BE..$C6D9:result:='P';   
          $C6DA..$C8BA:result:='Q';   
          $C8BB..$C8F5:result:='R';   
          $C8F6..$CBF9:result:='S';   
          $CBFA..$CDD9:result:='T';   
          $CDDA..$CEF3:result:='W';   
          $CEF4..$D188:result:='X';   
          $D189..$D4D0:result:='Y';   
          $D4D1..$D7F9:result:='Z';   
      else   
          result:=char(32);   
      end;   
  end;   
    
  procedure   TForm1.SpeedButton1Click(Sender:   TObject);   
  var   
      i:integer;   
      s:string;   
  begin   
      s:='';   
      i:=1;   
      edit2.Clear;   
      while   i<Length(edit1.Text)   do   
      begin   
          s:=Copy(edit1.Text,i,2);   
          if   s>=Chr(128)   then   begin   
              i:=i+2;   
              edit2.Text:=edit2.Text+yHZToPY(s);   
          end;   
      end;   
  end;   






function   UChineseMN(sr:   String):   String;   
  var   
      C1,   Len1,   C2:   Integer;   
      ir   :   Word;   
      FResult   :   String;   
  begin   
      FResult   :=   '';   
      C1   :=   1;   
      Len1   :=   Length(sr);   
      while   (C1<=Len1)   do   
      begin   
          if   (ord(sr[C1])>=160)   and   (ord(sr[C1+1])>=160)   then   
          begin   
              ir   :=   (ord(sr[C1])-160)*100   +   ord(sr[C1+1])-160;   
              C2   :=   0;   
              while   (C2<=26)   do   
              begin   
                  if   (ir>=ChinaCode[C2,0])   and   (ir<=ChinaCode[C2,1])   then   
                  begin   
                      FResult   :=   FResult+chr(C2+ord('a'));   
                      break;   
                  end;   
                  C2   :=   C2   +   1;   
              end;   
              C1   :=   C1   +   2;   
          end   
          else   if   (   (   ord(sr[C1])     >=65   )   and     (   ord(sr[C1])   <91   )   
                or   (   ord(sr[C1]   )   >=97   )   and     (   ord(sr[C1])   <123   )   
                or   (   ord(sr[C1])   >=48   )   and   (ord(sr[C1])   <58)   )     then   
          begin   
              FResult   :=   FResult+sr[C1];   
              C1   :=   C1   +   1;   
          end   
          else   
              C1   :=   C1   +   2;   
      end;   
      Result   :=   FResult;   
  end;   

 2.中文转字符

var
 w : Word;
 c : WideChar;
 ws: WideString;
 s : string;
begin
 {准备工作}
 ws := '万一';
 c := ws[1];
//ShowMessage(c); {万}
 {从汉字到 UniCode 编码}
 w := Ord(c);         {返回十进制数    : 19975}
 w := Word(c);         {返回十进制数    : 19975}
 s := Format('%.4x',[Ord(c)]); {返回十六进制的字符串: 4E07 }
 s := IntToHex(Ord(c), 4);   {返回十六进制的字符串: 4E07 }
 {从 UniCode 编码到汉字}
 c := #19975;      {万}
 c := #$4E07;      {万}
 c := #$4e07;      {万}
 c := WideChar(19975); {万}
 c := WideChar($4E07); {万}
end;

 

posted @ 2013-02-24 15:59  神码都在云端  阅读(364)  评论(0编辑  收藏  举报