線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2926
推到 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。程式碼如下:
id=code>
id=code> 現在小弟我有一個問題: 請問用這個相同的程式是否能將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。程式碼如下:
id=code>
id=code> 現在小弟我有一個問題: 請問用這個相同的程式是否能將GB轉成Unicode呢? 如果不能的話,應該修改哪裡呢? 小弟我是BCB的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡! </font>id=quote>id=quote> leeli你好icon_smile.gif: 沒有實際run過你的source code,如果它是ok由BIG5轉成Unicode的話,那我想你的PC應該是中文版的icon_smile.gif! 也就是說MultiByteToWideCharid=green>這個function的第一個參數你下的是CP_ACPid=red>,表示你叫它選system default(中文版OS理應是Big5)的字碼表(code page)!於是它便把input字串當成一個Big5的字串去轉成unicode! 所以今天你要在中文版的OS轉GB成unicode,理應是下第一個參數成"936id=red>"才可以的!    
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"才可以的!
id=quote>id=quote> 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的新手,若有發問一些蠢問題,敬請見諒。 對於各位的大力協助,感激不盡!
id=quote>id=quote> leeli你好icon_smile.gif: 是的,可以的icon_smile.gif! 嗯,剛剛按錯了!還沒說完icon_smile_big.gif! GB(簡體字)字碼表有分3大類,GB2312、GBK、GB18030-2000!各類又自行細很多不同的版本! 936id=red>這個表示GBK這一種的簡體字表,而GB18030的表示integer為54936id=red>! 但並不是隨便的字碼表OS都有支援的,要看控制台字型地區那裏的值,有提供的話還要有抅選才行! 對於某一個字碼表是否有抅選可以用Win API function-->IsValidCodePageid=red>去查詢! 另外你在中文版OS run你這隻程式時,可能輸入簡體字串也可以輸出一個Unicode值,但它是錯的!不是真的unicode值! 例如:你輸入一個簡体字 "id=red>",它的輸出unicode是FD56id=red>,這是錯的,這不是它真正的unicode值! 因為国字的字碼為B9FAid=red>,但在中文版OS下,default的字表為Big5,所以它會把B9FA當成一個中文字再去轉成unicode!而B9FA的中文字是id=red>!也就是它會把国當成弊去轉出unicode!所以這個輸出的unicode "FD56"其實是 "弊" 的unicode值! 因為簡体字的字碼值,其值幾乎都有一個中文字的字碼值和它相同,所以今天你輸入一個簡体字進你的程式幾乎都可以有一個假的unicode(中文字的unicode)輸出! 基本的GB字碼範圍: B0A1-D7F9         漢字第一水準 D8A1-F7FE         漢字第二水準 明顯的可以發現都包在Big5的字碼範圍內了! 說了一堆,結論就是下CP_ACPid=red>就是吃system default字型,你要吃其它的話就要自已下code page的值icon_smile.gif! 發表人 - 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 訂閱
謝謝你的分享
系統時間:2016-05-05 01:20:35,  線上使用者 326 / Max 832,主題數:100,202,回覆數:222,124。 
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!