全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2607
推到 Plurk!
推到 Facebook!

有關中日文介面轉換的問題

尚未結案
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-07 12:08:27 IP:60.38.xxx.xxx 未訂閱
各位大大: 我現在的軟體需要有中文日文切換的顯示,我的作法是將中文及日文存在INI檔中,並存成Unicode的模式,可是在程式中讀取後,日文的部分卻變成"???"的樣式,我看過網站上的討論,BCB好像是不支援Unicode的,請問這樣應該如何解決呢?還是有相關的元件可以使用呢?謝謝
m8815010
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-07 21:47:33 IP:210.64.xxx.xxx 未訂閱
引言: 各位大大: 我現在的軟體需要有中文日文切換的顯示,我的作法是將中文及日文存在INI檔中,並存成Unicode的模式,可是在程式中讀取後,日文的部分卻變成"???"的樣式,我看過網站上的討論,BCB好像是不支援Unicode的,請問這樣應該如何解決呢?還是有相關的元件可以使用呢?謝謝
jackwu你好,基本的元件幾乎都沒有,有相當多的其它特別元件可以有吃Unicode字串的能力! 站上有很多這方面相關的訊息,download處! 但與其用這些另外的元件,不如直接將unicode轉回ansi字串比較快些!有需要再提供互轉的範例! 另外其實可以直接以 >
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-08 00:53:27 IP:60.38.xxx.xxx 未訂閱
引言: jackwu你好,基本的元件幾乎都沒有,有相當多的其它特別元件可以有吃Unicode字串的能力! 站上有很多這方面相關的訊息,download處! 但與其用這些另外的元件,不如直接將unicode轉回ansi字串比較快些!有需要再提供互轉的範例! 另外其實可以直接以 > < face="Verdana, Arial, Helvetica"> 謝謝版主的回應,其實現在我都還在測試的階段,還不是很清楚要用何種的方式來實現中日文語言的轉換,那可否麻煩版主提供Ansi轉Unicode的忙法嗎?另外Ansi Code直接存入INI中,是指存入一般的字串嗎?這個部分我還是不太懂,煩請大大指教,謝謝
m8815010
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-08 14:56:53 IP:61.63.xxx.xxx 未訂閱
引言: 謝謝版主的回應,其實現在我都還在測試的階段,還不是很清楚要用何種的方式來實現中日文語言的轉換,那可否麻煩版主提供Ansi轉Unicode的忙法嗎?另外Ansi Code直接存入INI中,是指存入一般的字串嗎?這個部分我還是不太懂,煩請大大指教,謝謝
jackwu你好: 簡單的 class="code"> // AnsiString to UnicodeString unsigned char* str="我愛中華"; wchar_t buf[4]; MultiByteToWideChar(950,0,str,8,buf,4); for (int i=0;i<4;i ) ShowMessage(IntToHex(buf[i],2)); // UnicodeString to AnsiString wchar_t buf[4]; byte str[8]; buf[0]=0x6211; buf[1]=0x611B; buf[2]=0x4E2D; buf[3]=0x83EF; WideCharToMultiByte(950,0,buf,4,str,8,NULL,NULL); for (int i=0;i<8;i ) ShowMessage(IntToHex(str[i],2)); 這是big5互轉的,如果要轉日文的話,第一個參數就要下932,詳細說明請查code page這樣的keyword! 另外互轉就是這兩隻api function而已,help或站上都查的到! 另外直以將日文或中文字串存入一個檔中,應該沒什麼問題吧!反正只要字碼不要跑掉,字串取出就不會亂掉!記得charset要切對就好了!不過要存在ini檔中最好還是要試一下先比較保險,因為ini檔取出字串的方式有可能日文字串會有字碼跑掉! All!
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-09 00:40:58 IP:60.38.xxx.xxx 未訂閱
謝謝版主大大: 此種方法我已經瞭解了,不過我想用另一種方法來做中日的切換,因為我的程式會在日本或者是在台灣使用,所以在中文的作業系統上,我也會安裝支援日文的語系,所以我打算在程式啟動的時候,來判斷系統的語系,然後自動的獨取INI中的中文或日文字串,而日文字串,在日文的語系中儲存成ANSI格式的時候,並不會有"????"的產生,所以在更換程式的語系時,應該就不會有亂碼產生的問題了吧! 而判斷語系的方法我在本站中有找到(Delphi) http://delphi.ktop.com.tw/topic.php?topic_id=56875 http://delphi.ktop.com.tw/topic.php?topic_id=55963 設定元件的日文字形及顯示的方法 http://delphi.ktop.com.tw/topic.php?topic_id=32558 請問這樣可行嗎?謝謝
m8815010
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-09 09:54:10 IP:61.63.xxx.xxx 未訂閱
引言: 謝謝版主大大: 此種方法我已經瞭解了,不過我想用另一種方法來做中日的切換,因為我的程式會在日本或者是在台灣使用,所以在中文的作業系統上,我也會安裝支援日文的語系,所以我打算在程式啟動的時候,來判斷系統的語系,然後自動的獨取INI中的中文或日文字串,而日文字串,在日文的語系中儲存成ANSI格式的時候,並不會有"????"的產生,所以在更換程式的語系時,應該就不會有亂碼產生的問題了吧! 而判斷語系的方法我在本站中有找到(Delphi) http://delphi.ktop.com.tw/topic.php?topic_id=56875 http://delphi.ktop.com.tw/topic.php?topic_id=55963 設定元件的日文字形及顯示的方法 http://delphi.ktop.com.tw/topic.php?topic_id=32558 請問這樣可行嗎?謝謝
jackwu你好: 嗯,估且不說中文 >!) 判斷完後再依種類讀日文或中文字串,重點是這時程式中所有元件的顯示字集都要切換,才能正常顯示字串,如日文切 >!
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-09 15:22:04 IP:222.3.xxx.xxx 未訂閱
版主大人: 謝謝你的回應,我依照我的想法,是可以再不同的
m8815010
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-10 11:50:12 IP:61.63.xxx.xxx 未訂閱
引言: 版主大人: 謝謝你的回應,我依照我的想法,是可以再不同的>< face="Verdana, Arial, Helvetica"> jackwu你好: < class="code"> 嗯,你講的同一.txt檔來回在不同OS編輯後,再到中文OS去顯示這個.txt檔,應該不會有亂碼吧!? 之前經驗是不會,剛又特地試了一下也不會啊! 首先,不知道你用什麼編輯工具,但建議不要用word或notepad,用Ultra editor最好! 然後假設你先在中文OS的一個.txt檔輸入〝日本〞兩個字,然後存檔,然後再把檔copy到日文OS下, 再開啟輸入〝日本〞兩個字,完成後存檔! 這時這個.txt檔中會有兩個〝日本〞的字串,請用Hexdecimal的模式檢視,你會發現不管在日文或 中文下看時都是: 日本 --> 0xA4E9 0xA5BB //這是中文字中〝日本〞的字碼 日本 --> 0x93FA 0x967B //這是日文字中〝日本〞的字碼 也是就說,不管如何交叉編輯,我們發現字碼是不會亂掉的! 另外以Unltra Editor而言,一次只能選一種charset做顯示,所以你當你要看中文字串時,就切中文 的字集,這時日文字串是亂的,當你要看日文字串時,就切日文字集,這時中文字串是亂的! jackwu你說的是這樣的亂法嗎?這是假亂而不是真亂哦! 也就是還是回到我的結論,只要字碼對就是對,字碼亂才是亂,光眼見不一定準! 像上例你只要確定是不是這樣就知道碼亂了沒: 日本 --> 0xA4E9 0xA5BB 日本 --> 0x93FA 0x967B 若真正字碼亂了則可能是類似這樣的情形: (字碼經過一些過程後,系統不認識這樣的字碼,於是都轉成問號,也就是0x3F) ???? --> 0x3F3F 0x3F3F 日本 --> 0x93FA 0x967B 結論就是今天我要一個txt檔中放中文和日文的〝日本〞字串,其實你會發現這個txt檔只是有8個bytes 存成: A4E9 A5BB 93FA 967B 是不會亂的!然後你要顯示的話,就是中文的話抽前4個bytes,日文的話抽後4個bytes,然後選擇字集去 show這4個bytes! 建議你可用.txt檔記錄資料測試之,如: 日文字,中文字,英文字 這樣放一行,以逗號區隔! 這樣純環境一測變知行不行了! All! 啊,對了,還有時候當日文字串中有半角的字時,也會有造成顯示亂碼的情況發生,不過這也是如上述說的假亂碼啦! 發表人 -
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-10 12:26:37 IP:222.3.xxx.xxx 未訂閱
謝謝版主如此詳細的解釋,受益良多 我現在編輯文件的軟體是使用 > 然後針對亂碼的問題,我先前測試是使用我先前說的格式 [ >!然後我也會改由
m8815010
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-10 18:09:39 IP:61.63.xxx.xxx 未訂閱
引言: 謝謝版主如此詳細的解釋,受益良多 我現在編輯文件的軟體是使用 > 然後針對亂碼的問題,我先前測試是使用我先前說的格式 [ >!然後我也會改由>< face="Verdana, Arial, Helvetica"> jackwu你好: 嗯,首先你只是在同一台 >!反正你自已要卻定輸入的字串是不是你真正想要的! 另外我上面解釋日文字串前> 環境:假設有一個. >! < class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { TStringList* data=new TStringList; TStringList* pattern=new TStringList; data->LoadFromFile("C:\\demo.txt"); pattern->CommaText=data->Strings[0]; if (Edit2->Text=="1") { Edit1->Font->Charset=136; Edit1->Text=pattern->Strings[0]; } if (Edit2->Text=="2") { Edit1->Font->Charset=128; Edit1->Text=pattern->Strings[1]; } delete data; delete pattern; } 已經幫你在日文、中文OS try過都是可以正常運作的! 測試環境很簡單,複雜、吃ini檔的請自try了,All!
jackwu
一般會員


發表:28
回覆:54
積分:16
註冊:2002-08-18

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-10 22:19:26 IP:60.38.xxx.xxx 未訂閱
版主大大: 真是太感謝你,還麻煩你在百忙之中幫我測試,我會好好的應用的,感謝在感謝囉!
系統時間:2024-05-15 13:57:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!