全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1283
推到 Plurk!
推到 Facebook!

如何得知一個Edit裡的內容含有中文或英文(2和1位元)呢?

答題得分者是:Chance36
lcc1299
一般會員


發表:39
回覆:42
積分:21
註冊:2004-09-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-23 00:50:02 IP:210.64.xxx.xxx 未訂閱
各位大大,請問一下:如果要得知一個edit裡的內容(我愛'Delphi),要如何才能得知是中文或英文呢?,因為我想每次拿一個字來做比較,但是我無法得知,每次要拿的字是2位元或是1位元的?有...辦法嗎?還是有什麼指定可以把他全轉成2位元的呢?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-23 01:12:25 IP:203.204.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-23 01:23:40 IP:210.64.xxx.xxx 未訂閱
好奇怪哦, x:='我愛碟哦壞'; t:=length(x); 得到t為10,但配合copy(x,1,1),他一次會拿到一個中文字(2位元) 跟我想的不一樣= ="!我還以為他會拿到亂碼.... 謝謝了Chance36大大,我的問題解決了,不過WideString他做用是什麼呢? 我剛找了一下下,沒找到,可以跟我說一下下嗎?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-23 01:38:52 IP:203.204.xxx.xxx 未訂閱
lcc1299 你好     WideString就是Delphi支援UnCode的一種字串型態,至於它實際儲存的方式是使用UTF-8或UTF-16還是另一種(我忘了)儲存格式,我就沒有研究了,憑著以前的印象,我也是剛才試一下而已,我也未曾沒用過,請勿見怪! 常有人問為什麼很多字記事本可以輸入而Delphi開發的程式卻無法輸入,只顯示個'?'而已,主要是Delphi提供的大部份元件的屬性或方法的參數,皆是使用String型態,而不是WideString型態所致,若要把所有的元件字串部份全改為WideString,那可就是大工程一件了。    _______________________________________ 深藍的魚,祝您好運..........連連
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-23 03:15:50 IP:61.64.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46228
cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-02 18:56:06 IP:210.201.xxx.xxx 未訂閱
試看看我自產的函式吧,給它一條字串,再告訴它字串中某個位置, 它就會告訴您那個位置是不是中文字的第一個字元。 函式中沒有檢查 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;
系統時間:2024-06-26 16:52:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!