在delphi中乙個漢字佔兩個位元組,各種字串處理函式,直接處理字串中漢字時經常會發生亂碼或不顯示。我在處理時也是弄了半天,到處找資料,一下是找到的幾種處理方法。在delphi7下測試通過。
一.中文所用的字元全是雙位元組字元,英文所用的位元組全是單位元組字元,也就是mbsinglebyte。本例項是用bytetype()函式返回字串指定位置上的字元,如果不是mbsinglebyte,則表示為雙位元組字元。主要**如下:
procedure tform1.button1click(sender: tobject);
var
s,s1: string;
i : integer;
begin
s := edit1.text;
i := 0;
while 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);
varstr,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;
endelse i:=i+1;
end;
label2.caption := '在字串中含有漢字'+sj;
end;
三用widestring型別。widestring處理漢字時漢字按乙個字元算。**如下:
procedure tform1.button3click(sender: tobject);
varstr: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函式博文.
delphi中URL的漢字編碼
show.asp?sort 全部 sortlevel 1 gorq 供 n 5 sitename 全部 img yes imgfile images dot g.gif 在delphi2010中,因為引入unicode的緣故,預設的成了3個 xx,導致我的程式出現問題,找了半天,每乙個函式能夠實現全...
delphi 中 unicode 轉漢字 函式
近期用到這個函式,無奈沒有找到 delphi 自帶的,網上找了下 有類似的,沒有現成的,我需要的是 支援 u4f00 這種格式的,即前面帶標準的 u 於是改造了一下。下面是 解碼 函式 方便有需要的人吧,我自己也需要 unicode轉漢字 支援自動過濾非 unicode編碼,即非 unicode編碼...
Delphi中的訊息處理
1 windows的訊息驅動體系 在windows系統中,訊息傳遞是實現物件間通訊和控制的主要手段。可以系統都以訊息驅動的方式工作。系統中發生的使用者輸入操作 顯示資訊的改變 系統環境引數變化等所有事件都以系統定義訊息的形式出現在相關的應用程式和視窗。所以程式設計的主要任務就是為這些訊息的處理設計 ...