線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4298
推到 Plurk!
推到 Facebook!

CB2009 對 Unicode 不完全支援? 只對 Delphi 支援?!

答題得分者是:aftcast
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-23 23:49:14 IP:211.72.xxx.xxx 訂閱
盼了多年的 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-24 02:46:16 IP:59.115.xxx.xxx 訂閱
請問一下,在delphi2009裡,它的string難道已改定義成WideString的別名? 還是string還是一樣等於bcb的ansistring?
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-24 09:10:27 IP:211.72.xxx.xxx 訂閱
抱歉, 我疏忽了! 而 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?
編輯記錄
herbert2 重新編輯於 2008-10-24 09:12:22, 註解 無‧
herbert2 重新編輯於 2008-10-24 09:13:32, 註解 無‧
herbert2 重新編輯於 2008-10-24 09:14:46, 註解 無‧
herbert2 重新編輯於 2008-10-24 09:16:24, 註解 無‧
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-24 09:23:52 IP:60.248.xxx.xxx 訂閱
delphi2009裡,它的string難道已改定義成WideString的別名?   Yes

請問一下,還是string還是一樣等於bcb的ansistring?
但 BCB 似乎不是~~~,光是

ShowMessage("飝");

D2009 OK , 但 BCB 2009 就秀出 ? 無法正確顯示




===================引 用 aftcast 文 章===================
請問一下,還是string還是一樣等於bcb的ansistring?
------
價值的展現,來自於你用哪一個角度來看待它!!
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-24 15:09:49 IP:59.115.xxx.xxx 訂閱
可見得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
編輯記錄
aftcast 重新編輯於 2008-10-24 15:11:21, 註解 無‧
aftcast 重新編輯於 2008-10-24 15:23:48, 註解 無‧
aftcast 重新編輯於 2008-10-24 21:06:45, 註解 無‧
aftcast 重新編輯於 2008-10-24 21:10:20, 註解 無‧
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-24 16:21:55 IP:220.141.xxx.xxx 訂閱
應該是這用的吧!
[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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-10-24 21:03:12 IP:60.248.xxx.xxx 訂閱
用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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-10-24 23:03:45 IP:211.72.xxx.xxx 訂閱
CB2009 尚有許多新事物待瞭解, 短短30天試用期已過半, 只好加緊測了!
尚有一堆 FileStream, MemoryStream 原使用 char, 用 Pointer 操作;
若想改用 Unicode, 中間夾雜:中文、英文、Integer、Double,
可還須耗時間想一下怎麼改.
本問題暫且結案.
勞煩大家了! 謝謝!
得分者只能一位, 對其他幾位的熱心實過意不去, 只能再打個揖啦!


系統時間:2024-05-02 15:25:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!