線上訂房服務-台灣趴趴狗聯合訂房中心
網站公告 :


Delphi K.Top討論區 » C++程式語言討論區(C++Builder) » BIG5 GB & Unicode轉換的問題
發表新文章
瀏覽次數:2369
推到 Plurk!
推到 Facebook!

BIG5 GB & Unicode轉換的問題

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




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

發送簡訊給我
#1 發表時間:2004-04-08 10:08:57 IP:61.30.xxx.xxx 未訂閱

Dears:
    小弟我寫的一隻程式,功能是BIG5轉成Unicode。程式碼如下:
        szText = ChangWord;
        MultiByteToWideChar(CP_ACP, 0, szText.c_str(), -1, wszText, 512*2);
        TMemoryStream *ms = new TMemoryStream;
        ms -> Size = StrToInt(szText.Length())*sizeof(wchar_t);
        ms -> Write(wszText, ms -> Size);
        for (int i = 0; i < ms -> Size/2; i++)
        {
        BYTE *a = (BYTE*)wszText + i*2;
        BYTE *b = (BYTE*)wszText + i*2 + 1;
        *a^=*b;
        *b^=*a;
        *a^=*b;
        }
        for (int i = 0; i < ms -> Size/2; i++)
        {
        BYTE *a = (BYTE*)ms -> Memory + i*2;
        BYTE *b = (BYTE*)ms -> Memory + i*2 + 1;
        *a^=*b;
        *b^=*a;
        *a^=*b;
        }
        for (int i=0; iSocket->ActiveConnections; i++)
        {
        ServerSocket1->Socket->Connections[i]->SendBuf( wszText, 512*2);
        }
        delete ms;

現在小弟我有一個問題:
請問用這個相同的程式是否能將GB轉成Unicode呢?
如果不能的話,應該修改哪裡呢?

小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!


m8815010
版主




發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 發表時間:2004-04-08 10:37:57 IP:61.63.xxx.xxx 未訂閱

引言:

Dears:
    小弟我寫的一隻程式,功能是BIG5轉成Unicode。程式碼如下:
        szText = ChangWord;
        MultiByteToWideChar(CP_ACP, 0, szText.c_str(), -1, wszText, 512*2);
        TMemoryStream *ms = new TMemoryStream;
        ms -> Size = StrToInt(szText.Length())*sizeof(wchar_t);
        ms -> Write(wszText, ms -> Size);
        for (int i = 0; i < ms -> Size/2; i++)
        {
        BYTE *a = (BYTE*)wszText + i*2;
        BYTE *b = (BYTE*)wszText + i*2 + 1;
        *a^=*b;
        *b^=*a;
        *a^=*b;
        }
        for (int i = 0; i < ms -> Size/2; i++)
        {
        BYTE *a = (BYTE*)ms -> Memory + i*2;
        BYTE *b = (BYTE*)ms -> Memory + i*2 + 1;
        *a^=*b;
        *b^=*a;
        *a^=*b;
        }
        for (int i=0; iSocket->ActiveConnections; i++)
        {
        ServerSocket1->Socket->Connections[i]->SendBuf( wszText, 512*2);
        }
        delete ms;

現在小弟我有一個問題:
請問用這個相同的程式是否能將GB轉成Unicode呢?
如果不能的話,應該修改哪裡呢?

小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!




leeli你好

沒有實際run過你的source code,如果它是ok由BIG5轉成Unicode的話,那我想你的PC應該是中文版的!

也就是說MultiByteToWideChar這個function的第一個參數你下的是CP_ACP,表示你叫它選system default(中文版OS理應是Big5)的字碼表(code page)!於是它便把input字串當成一個Big5的字串去轉成unicode!

所以今天你要在中文版的OS轉GB成unicode,理應是下第一個參數成"936"才可以的!





leeli
初階會員




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

發送簡訊給我
#3 發表時間:2004-04-08 10:46:28 IP:61.30.xxx.xxx 未訂閱

引言:
leeli你好:

沒有實際run過你的source code,如果它是ok由BIG5轉成Unicode的話,那我想你的PC應該是中文版的!

也就是說MultiByteToWideChar這個function的第一個參數你下的是CP_ACP,表示你叫它選system default(中文版OS理應是Big5)的字碼表(code page)!於是它便把input字串當成一個Big5的字串去轉成unicode!

所以今天你要在中文版的OS轉GB成unicode,理應是下第一個參數成"936"才可以的!



Dear m8815010:
    我的系統是繁體中文版的沒錯。
    忘了把我的問題說清楚。我現在是想要在簡體版的OS下去執行這一段程式。不知道這樣是不是能把GB轉成Unicode呢?


小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!
------
小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!

m8815010
版主




發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#4 發表時間:2004-04-08 10:53:32 IP:61.63.xxx.xxx 未訂閱

引言:

Dear m8815010:
    我的系統是繁體中文版的沒錯。
    忘了把我的問題說清楚。我現在是想要在簡體版的OS下去執行這一段程式。不知道這樣是不是能把GB轉成Unicode呢?


小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。
對於各位的大力協助,感激不盡!



leeli你好

是的,可以的!

嗯,剛剛按錯了!還沒說完!

GB(簡體字)字碼表有分3大類,GB2312、GBK、GB18030-2000!各類又自行細很多不同的版本!
936這個表示GBK這一種的簡體字表,而GB18030的表示integer為54936!

但並不是隨便的字碼表OS都有支援的,要看控制台字型地區那裏的值,有提供的話還要有抅選才行!
對於某一個字碼表是否有抅選可以用Win API function-->IsValidCodePage去查詢!

另外你在中文版OS run你這隻程式時,可能輸入簡體字串也可以輸出一個Unicode值,但它是錯的!不是真的unicode值!

例如:你輸入一個簡体字 "",它的輸出unicode是FD56,這是錯的,這不是它真正的unicode值!

因為国字的字碼為B9FA,但在中文版OS下,default的字表為Big5,所以它會把B9FA當成一個中文字再去轉成unicode!而B9FA的中文字是!也就是它會把国當成弊去轉出unicode!所以這個輸出的unicode "FD56"其實是 "弊" 的unicode值!

因為簡体字的字碼值,其值幾乎都有一個中文字的字碼值和它相同,所以今天你輸入一個簡体字進你的程式幾乎都可以有一個假的unicode(中文字的unicode)輸出!

基本的GB字碼範圍:

B0A1-D7F9         漢字第一水準
D8A1-F7FE         漢字第二水準

明顯的可以發現都包在Big5的字碼範圍內了!


說了一堆,結論就是下CP_ACP就是吃system default字型,你要吃其它的話就要自已下code page的值!

發表人 - m8815010 於 2004/04/08 11:11:26

發表人 - m8815010 於 2004/04/08 11:20:27

hungchieh1029
一般會員




發表:0
回覆:1
積分:0
註冊:2011-08-11

發送簡訊給我
#5 發表時間:2011-08-11 17:29:00 IP:59.120.xxx.xxx 訂閱

謝謝你的分享

系統時間:2014-11-23 17:27:04,  線上使用者 231 / Max 1,237,主題數:97,513,回覆數:219,795。  聯絡我們 | Delphi.KTop討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!
5151線上健康照護網 | 台灣西醫網 | 台灣中醫網 | 台灣牙科網 | 台灣照護網 | 趴趴狗旅遊網
大花蓮旅遊網 | 大花蓮民宿網 | 花蓮旅遊網 | 花蓮旅遊 | 花蓮旅遊 | 花蓮住宿
花蓮民宿網 | 花蓮旅遊 | 花蓮住宿 | 花蓮民宿 | 花蓮旅遊 | 花蓮民宿
花蓮住宿 | 大南投旅遊網 | 大南投民宿網 | 日月潭風景區 | 日月潭旅遊網 | 日月潭民宿網
日月潭住宿網 | 宜蘭旅遊網 | 宜蘭民宿網 | 宜蘭住宿網 | 宜蘭旅遊網 | 宜蘭民宿網
宜蘭住宿網 | 宜蘭旅遊網 | 宜蘭民宿網 | 宜蘭住宿網 | 台東旅遊網 | 台東民宿網
台東住宿網 | 台東旅遊網 | 台東民宿網 | 台東住宿網 | 台東旅遊 | 台東民宿
台東住宿 | 綠島旅遊網 | 綠島民宿網 | 綠島住宿網 | 綠島旅遊網 | 綠島民宿網
綠島住宿網 | 綠島旅遊網 | 綠島民宿網 | 綠島住宿網 | 集集旅遊網 | 集集民宿網
集集住宿網 | 關子嶺旅遊網 | 關子嶺民宿網 | 白河旅遊網 | 白河民宿網 | 心脈大師
尊榮牙醫診所 |