CB2009 對 Unicode 不完全支援? 只對 Delphi 支援?! |
答題得分者是:aftcast
|
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
盼了多年的 Unicode 支援竟只是虛晃一招? 看一下 CB2009 之 Help! 實測也確實是如此!
Pascal procedure ShowMessage(const Msg: string); C ShowMessage(const AnsiString Msg); Pascal function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer; overload; function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn): Integer; overload; C int MessageDlg(const AnsiString Msg, TMsgDlgType DlgType, TMsgDlgButtons Buttons, Longint HelpCtx); int MessageDlg(const AnsiString Msg, TMsgDlgType DlgType, TMsgDlgButtons Buttons, Longint HelpCtx, TMsgDlgBtn DefaultButton); 看來還有很多不支援的項目有待發掘? |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
|
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
抱歉, 我疏忽了! 而 BC 錯誤的 Help 也誤導了我.
CB2009 與 Delpji 2009 中: String = UnicodeString AnsiString != String UnicodeString != WideString ShowMessage(L"壱弍叁"); // 會正確顯示 String sx1 = L"壱弍叁"; // 加 L 才能填入正確的字串值 int ix1 = sx1.Length(); // 得 3 ix1 = sizeof(sx1); // 得 4 ===================引 用 aftcast 文 章=================== 請問一下,在delphi2009裡,它的string難道已改定義成WideString的別名? 還是string還是一樣等於bcb的ansistring? |
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
delphi2009裡,它的string難道已改定義成WideString的別名? Yes
請問一下,還是string還是一樣等於bcb的ansistring? 但 BCB 似乎不是~~~,光是 ShowMessage("飝"); D2009 OK , 但 BCB 2009 就秀出 ? 無法正確顯示 ===================引 用 aftcast 文 章=================== 請問一下,還是string還是一樣等於bcb的ansistring?
------
價值的展現,來自於你用哪一個角度來看待它!! |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
可見得delphi的預設字串常數已經是string(unicodestring的別名)。但是
cb的字串常數依舊是內訂成AnsiString。我個人覺得這是好事! 因為c 有L字元表示long修飾字,加到字串前就可以技巧地讓原來的char單位變成word單位,這也是就成就了ucs2的雙位元編碼。 有cb以來,unicode的部份就該用L來表達,有L就是word,沒有就是char。故 szS1 = "abc"; szS2 = L"abc"; 其實szS2的寫法並不為了unicode而來,是有c語言就有,只是巧妙的可以用在unicode上面。必竟c/c 算是中階語言,該用資料結構的觀點來看待。 此外,剛也查了一下,unicodestring 真的不等同widestring,他用了一個技巧把widestring的結構稍做改變以增加速度。而widestring未來可能只會用在BSTR的com元件上做配合。 cb中的String這個別名,可能是ansistring也可能是unicodestring,要看define的結果。但好像預設的define是unicodestring的樣子… PS 在bcb6的ide介面中輸入unicode字串其實是可以的,我都一直用如下的用法 L"測式\x5803\x5586"L"1"; <---知道是什麼字串嗎? 答案是… 測式堃喆1 初學者可以學一下這個技巧喔!! ===================引 用 careychen 文 章=================== delphi2009裡,它的string難道已改定義成WideString的別名? Yes 請問一下,還是string還是一樣等於bcb的ansistring? 但 BCB 似乎不是~~~,光是 ShowMessage("飝"); D2009 OK , 但 BCB 2009 就秀出 ? 無法正確顯示 ===================引 用 aftcast 文 章=================== 請問一下,還是string還是一樣等於bcb的ansistring?
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
應該是這用的吧!
[code cpp] void __fastcall TForm3::Button1Click(TObject *Sender) { /* 在C2009 Help用"Unicode in the IDE"關鍵字找到的 */ /* 可以這樣宣告 */ UnicodeString us1 = U"飝"; ShowMessage(us1); /* 直接這樣用也可以 */ ShowMessage(U"飝"); } [/code]
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2008-10-24 16:25:47, 註解 無‧
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
用u有點奇怪,是不是cb自定的?
c 語言(不是c )的時代就有 wide Char 即 wchar_t 型別。 L (long)是來修飾比原型別長的修飾語,如 long int 比int 長… L"ABC"; 是告知 "ABC"不是 char * (一個byte),而是2個byte的wchar_t 。事實上wchar_t是這樣定義的 typedef unsigned short wchar_t ; //即2byte,short int 的關係 U在c/c 裡原來是修飾 unsigned的意思,在傳統字串前放 unsigned實在沒什意思。 codegear的人員不會是自創U來表示unicode吧????!! 在過去使用c與sdk開發windows 95程式時就大量的會使用 L 這個long來修飾原char。個人覺得還是用L較好,較有portable,且make sense!! ===================引 用 pceyes 文 章=================== 應該是這用的吧! [code cpp] void __fastcall TForm3::Button1Click(TObject *Sender) { /* 在C2009 Help用"Unicode in the IDE"關鍵字找到的 */ /* 可以這樣宣告 */ UnicodeString us1 = U"飝"; ShowMessage(us1); /* 直接這樣用也可以 */ ShowMessage(U"飝"); } [/code]
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |