如何分辨中英文夾雜的字串中的中英文 |
答題得分者是:P.D.
|
湯圓仔
一般會員 發表:3 回覆:1 積分:0 註冊:2007-08-21 發送簡訊給我 |
我用Reg讀進去後,發現遇到中文會出現亂碼,我朋友告訴我分辨第一個byte有無大於127就行了
如果沒有就讀一個byte 但是改完後,執行結果還是依樣 以下是我的Code [code delphi] //讀進資料 Reg.ReadBinaryData(ComboBox1.Text '_bin',buf,sizeof(buf)); while (buf[i]<>0) and( i<= 255) do begin if buf[i] >= 127 then begin //第一個 byte > 127即可判斷不是常見字元如abcd,!@# Memo1.lines.Text := Memo1.lines.Text chr( StrToInt('0x' intToHex(buf[i],2) inttohex(buf[i 1],2))); i := i 2; end else begin Memo1.lines.Text := Memo1.lines.Text chr(buf[i]); i := i 1; end; end; [/code] 請各位幫忙 謝謝 編輯記錄
湯圓仔 重新編輯於 2007-11-16 22:46:31, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
這是一個判斷是否為中文字的函數, 然後在切斷轉折時能不會把中文字切成兩半, 與你要的功能很類似, 既然你的程式都已完成七成以上, 我想看這個範例, 應該不難應用到你的程式中, 重點就是一個函數的判斷
[code delphi] function WordsWrap(instr: string; cutlength: integer): string; var sCuted: string; temp: string; iCutLength: integer; j: integer; bIsDBCS: boolean; begin temp:= ''; // 截出 _LengthPerLine 個字元出來 iCutLength:= cutlength; repeat sCuted:= Copy(instr, 1, iCutLength); iCutLength:= Length(sCuted); bIsDBCS:= False; // 看看最後一個字元是不是中文的前半個字 for j:= 1 to iCutLength do begin if bIsDBCS then bIsDBCS:= False else if Windows.IsDBCSLeadByte(byte(sCuted[j])) then bIsDBCS:= True; end; // 如果最後一個字是中文的話, 少截一個字元 if bIsDBCS then Dec(iCutLength); temp:= temp (Copy(instr, 1, iCutLength)) #13; instr:= Copy(instr, iCutLength 1, Length(instr) - iCutLength); until Length(instr) <= 0; result:= temp; end; [/code] |
湯圓仔
一般會員 發表:3 回覆:1 積分:0 註冊:2007-08-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |