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

請問遇到Unicode字元可否判斷?

 
mcho_60461
一般會員


發表:16
回覆:23
積分:7
註冊:2006-07-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-18 12:31:23 IP:220.137.xxx.xxx 訂閱
各位大大好:
我使用DELPHI 7也安裝TntUnicodeControls元件,Unicode可輸入,因某種因素須判定資料
是否含有Unicode,要如何判斷?
謝謝!
------
mcho
kmlsoft
一般會員


發表:1
回覆:5
積分:6
註冊:2003-11-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-24 16:19:46 IP:221.226.xxx.xxx 未訂閱
非常简单!
[code]
function CheckUnicodeIn(swSou:WideString):Boolean;
Var
sString := swSou;
Result := Pos('?', sString)>0;
end;
[/code]
mcho_60461
一般會員


發表:16
回覆:23
積分:7
註冊:2006-07-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-24 17:03:18 IP:218.160.xxx.xxx 訂閱
我也是這樣判斷,但是本身是'?'時也會被誤認為Unicode!

------
mcho
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-24 23:22:30 IP:203.73.xxx.xxx 未訂閱
在Unicode的Component上輸入的就一定是Unicode,即使是轉失敗了,還是Unicode,
因為它的type還是WideString,即使是?
如果你是要判讀文字檔那又是另一回事了
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
John Wong
初階會員


發表:1
回覆:35
積分:32
註冊:2004-09-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-28 01:24:58 IP:219.77.xxx.xxx 未訂閱
如果你所指的Unicode字元是指當Ansi字元時是屬於雙位元字節的話, 這相當易辦.
因為Unicode的前256字元的值, 與單字節字元的值是相同的, 所以只要檢查WideString中每個字元的值, 當中是否有字元的值大於255, 便可判斷這是一個雙位元字節.
而程式的寫法可以參考system.UnicodeToUtf8.
mcho_60461
一般會員


發表:16
回覆:23
積分:7
註冊:2006-07-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-29 20:48:57 IP:220.137.xxx.xxx 訂閱
UnicodeToUtf8我看過了,但我不知道如何用?可否寫個使用UnicodeToUtf8的範例!
謝謝!
------
mcho
John Wong
初階會員


發表:1
回覆:35
積分:32
註冊:2004-09-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-31 21:04:59 IP:219.77.xxx.xxx 未訂閱
你可以直接使用以下程式測試是否有widechar.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TntStdCtrls;

type
TForm1 = class(TForm)
TntEdit1: TTntEdit;
TntButton1: TTntButton;
procedure TntButton1Click(Sender: TObject);
private
{ Private declarations }
function hasWideChar(WS: WideString): Boolean;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
{$R *.dfm}
function TForm1.hasWideChar(WS: WideString): Boolean;
var I: Integer;
begin
Result := False;
for I := 1 to Length(WS) do begin
if Cardinal(WS[I]) > 255 then begin
Result := True;
Exit;
end;
end;
end;

procedure TForm1.TntButton1Click(Sender: TObject);
begin
if hasWideChar(TntEdit1.Text) then
ShowMessage('yes')
else
ShowMessage('No');
end;

end.

mcho_60461
一般會員


發表:16
回覆:23
積分:7
註冊:2006-07-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-02-01 15:01:19 IP:220.137.xxx.xxx 訂閱
我試過了,好像只能判定中英字而已,也就是說只要給非Unicode的中文字也是yes
謝謝!
------
mcho
mcho_60461
一般會員


發表:16
回覆:23
積分:7
註冊:2006-07-31

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-03-19 10:07:10 IP:220.137.xxx.xxx 訂閱
John Wong :你好!
謝謝你! 我想到一個解決方法,就是先引用你的方式判斷如是Yes時再利用Kmlsoft的方法判斷是 "?"即為Unicode,我的方法是否可行?
這問題已經懸好久,希望你能不吝賜教!
------
mcho
jasper_dale
初階會員


發表:2
回覆:48
積分:35
註冊:2005-09-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-03-20 14:10:41 IP:220.130.xxx.xxx 訂閱
<textarea cols="60" rows="10" class="delphi" name="code">uses TntSysUtils;
procedure TForm1.TntButton1Click(Sender: TObject);
begin
if IsWideStringMappableToAnsi(TntEdit1.Text) then
ShowMessage('Ansi')
else
ShowMessage('Unicode');
end;
</textarea>
------
{"name":{["賈氏柏"]}}
mcho_60461
一般會員


發表:16
回覆:23
積分:7
註冊:2006-07-31

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-03-21 15:04:24 IP:59.112.xxx.xxx 訂閱
Hi! Jasper_dale:你好!
謝謝你!本題應歸你得分!
------
mcho
系統時間:2024-04-28 13:17:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!