如何得知一個Edit裡的內容含有中文或英文(2和1位元)呢? |
答題得分者是:Chance36
|
lcc1299
一般會員 ![]() ![]() 發表:39 回覆:42 積分:21 註冊:2004-09-12 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
lcc1299 你好
你可以用WideString 作轉換 Var s : WideString; i : Integer; Msg : String ; begin Msg := '我愛''Delphi' ; s := Msg; Msg := '' ; For i:=1 To Length(s) Do Begin Msg := Msg s[i] '_'; // 加上底線看得比較清楚 ENd; ShowMessage(Msg);//結果 => "我 愛 ' D e l p h i " end; 或者用LeadBytes來判斷是否為中文字 Var s : String; i : Integer; Msg : String ; IsDblByte : Boolean; begin s := '我愛''Delphi' ; Msg := '' ; IsDblByte := False; For i:=1 To Length(s) Do Begin If IsDblByte Then Begin Msg := Msg s[i] '_'; // 加上_更清楚 IsDblByte := False; End Else Begin If S[i] IN LeadBytes Then Begin IsDblByte := True; Msg := Msg s[i]; End Else Begin Msg := Msg s[i] '_'; End; End; ENd; ShowMessage(Msg);//結果 => "我 愛 ' D e l p h i " end;_______________________________________ 深藍的魚,祝您好運..........連連 發表人 - chance36 於 2004/09/23 01:22:39 |
lcc1299
一般會員 ![]() ![]() 發表:39 回覆:42 積分:21 註冊:2004-09-12 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
lcc1299 你好 WideString就是Delphi支援UnCode的一種字串型態,至於它實際儲存的方式是使用UTF-8或UTF-16還是另一種(我忘了)儲存格式,我就沒有研究了,憑著以前的印象,我也是剛才試一下而已,我也未曾沒用過,請勿見怪!
常有人問為什麼很多字記事本可以輸入而Delphi開發的程式卻無法輸入,只顯示個'?'而已,主要是Delphi提供的大部份元件的屬性或方法的參數,皆是使用String型態,而不是WideString型態所致,若要把所有的元件字串部份全改為WideString,那可就是大工程一件了。 _______________________________________
深藍的魚,祝您好運..........連連
|
conundrum
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
|
cancer
高階會員 ![]() ![]() ![]() ![]() 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
試看看我自產的函式吧,給它一條字串,再告訴它字串中某個位置,
它就會告訴您那個位置是不是中文字的第一個字元。
函式中沒有檢查 index 有沒有超出字串的範圍,
想安全一點,就自己加 if index > Length(s) then exit; function TForm1.DetermineLeadingByte( s : string;
index : Integer) : Boolean;
var i : Integer;
begin result := false;
if s[index] < #128 then exit;
i := 1; while i <= index do
begin
if i < index - 2 then
begin
if s[i] < #128 then i := i 1 else i := i 2;
end
else break;
end; // end while if i = index - 2 then begin if s[i] > #127 then result := true
else result := s[i 1] < #127;
end else if i = index - 1 then result := s[i] < #127
else if i = index then result := true; end;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |