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

聊天室中,如何把sever端要傳出去的訊息,轉換成unicode格式傳送出去

答題得分者是:RaynorPao
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-25 15:44:41 IP:210.80.xxx.xxx 未訂閱
小弟我寫了一個類似聊天室功能的程式。在接收及發送訊息功能都很正常。 現在小弟我有個小問題,因為這支程式主要是接收由硬體端傳回來的資料,以及下指令給硬體。但是硬體,也就是client端只接受unicode格式的字串。 請問各位,在BCB中有沒有能直接將字串轉成unicode格式的語法呢?或是,該如何處理呢?
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-25 16:09:39 IP:61.221.xxx.xxx 未訂閱
引言: 小弟我寫了一個類似聊天室功能的程式。在接收及發送訊息功能都很正常。 現在小弟我有個小問題,因為這支程式主要是接收由硬體端傳回來的資料,以及下指令給硬體。但是硬體,也就是client端只接受unicode格式的字串。 請問各位,在BCB中有沒有能直接將字串轉成unicode格式的語法呢?或是,該如何處理呢?
leeli 你好: 請參考以下的連結文章
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-26 10:25:27 IP:210.80.xxx.xxx 未訂閱
再請問一下: 像那篇文章中: char sz[256]="我們大家都是中國人"; AnsiString asz=(AnsiString)sz; int iWCBuf=asz.WideCharBufSize(); wchar_t wsz[512]={0}; asz.WideChar(wsz, iWCBuf); 如果要在Edit中顯現出轉換過的字串,該下那個指令呢? 還有,上面那個例子轉換過的字串是什麼呢? 因為,如果用Edit-Text=...;的話,他顯現出來的好像還是AnsiString的格式 還有一個問題, 在聊天室當中,該如何把轉換過的字串給send出去呢? 因為用SendText()傳的話,他好像還是會傳送AnsiString的格式 因為,小弟我是個超級新手,而且對於AnsiString並不瞭解,而對於unicode更是以前都沒有聽過,希望各位先進能給小弟我多指教!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-26 10:42:02 IP:203.73.xxx.xxx 未訂閱
引言: 再請問一下: 像那篇文章中: char sz[256]="我們大家都是中國人"; AnsiString asz=(AnsiString)sz; int iWCBuf=asz.WideCharBufSize(); wchar_t wsz[512]={0}; asz.WideChar(wsz, iWCBuf); 如果要在Edit中顯現出轉換過的字串,該下那個指令呢? 還有,上面那個例子轉換過的字串是什麼呢? 因為,如果用Edit-Text=...;的話,他顯現出來的好像還是AnsiString的格式 還有一個問題, 在聊天室當中,該如何把轉換過的字串給send出去呢? 因為用SendText()傳的話,他好像還是會傳送AnsiString的格式 因為,小弟我是個超級新手,而且對於AnsiString並不瞭解,而對於unicode更是以前都沒有聽過,希望各位先進能給小弟我多指教!
leeli 你好:
(1)據我所知 VCL 元件目前是不支援 UNICODE 的,因此你要先把 UNICODE 轉回
   ANSI 才能顯示在 VCL 元件
(2)你如果轉成 UNICODE 的話,要用 SendBuf 的方式傳送
-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-26 11:20:30 IP:210.80.xxx.xxx 未訂閱
那再請教一下: 像上面的例子,如果我要把轉換過的"我們大家都是中國人"用SendBuf傳送出去,該如何下這個指令呢? 就以這個例子解說給我明白一下,感激不盡~
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-26 11:27:01 IP:203.73.xxx.xxx 未訂閱
引言: 那再請教一下: 像上面的例子,如果我要把轉換過的"我們大家都是中國人"用SendBuf傳送出去,該如何下這個指令呢? 就以這個例子解說給我明白一下,感激不盡~
leeli 你好: 我不太清楚你是利用什麼元件來寫的 假設你是使用 TServerSocket/TClientSocket 元件的話 請先參考以下的範例 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25914 只需要把傳輸的 structure 裡面改成你要傳的 UNICODE 即可 -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-26 11:47:25 IP:210.80.xxx.xxx 未訂閱
RaynorPao你好: 小弟我是使用TServerSocket的元件來寫的。 以下是我要send訊息所使用的程式碼: void __fastcall TForm1::Button2Click(TObject *Sender) { mode=1; AnsiString sz=Edit4->Text; AnsiString asz=(AnsiString)sz; int iWCBuf=asz.WideCharBufSize(); wchar_t wsz[512]={0}; asz.WideChar(wsz, iWCBuf); ServerSocket1->Socket->Connections[0]->SendText(sizeof(wsz)); Edit4->Clear(); } 能否幫小弟我看看,是否這樣就能把我要傳的訊息轉成unicode傳出去呢? 感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-26 13:35:57 IP:203.73.xxx.xxx 未訂閱
引言: RaynorPao你好: 小弟我是使用TServerSocket的元件來寫的。 以下是我要send訊息所使用的程式碼: void __fastcall TForm1::Button2Click(TObject *Sender) { mode=1; AnsiString sz=Edit4->Text; AnsiString asz=(AnsiString)sz; int iWCBuf=asz.WideCharBufSize(); wchar_t wsz[512]={0}; asz.WideChar(wsz, iWCBuf); ServerSocket1->Socket->Connections[0]->SendText(sizeof(wsz)); Edit4->Clear(); } 能否幫小弟我看看,是否這樣就能把我要傳的訊息轉成unicode傳出去呢? 感激不盡!
leeli 你好: 請參考以下的寫法 < class="code"> AnsiString sz="測試傳送字串abcdefg"; wchar_t wsz[512]={0}; int iwLen=0; MultiByteToWideChar(CP_ACP, 0, sz.c_str(), -1, wsz, 512); iwLen=(wcslen(wsz) 1)*2; ServerSocket1->Socket->Connections[0]->SendBuf(wsz, iwLen); -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
leeli
初階會員


發表:57
回覆:55
積分:27
註冊:2003-06-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-27 14:10:29 IP:210.80.xxx.xxx 未訂閱
大大: 今天用此方式測試了一下,又發現了一個奇怪的問題,如果傳送的是一串英文或數字的字串,只會傳送第一個字元。如果是中文字就沒關係。 以下是我的程式碼,能否幫我看看,感激不盡~ void __fastcall TForm1::Button2Click(TObject *Sender) { mode=1; AnsiString sz=Edit4->Text; int iwLen=0; wchar_t wsz[512]={0}; MultiByteToWideChar(CP_ACP, 0, sz.c_str(), -1, wsz, 512); iwLen=(wcslen(wsz) 1)*2; ServerSocket1->Socket->Connections[j]->SendBuf(wsz, iwLen); Edit4->Clear(); }
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
系統時間:2024-05-05 22:52:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!