引言
要確定工作內容,評估工作時間,首先我們要對需求及問題進行分析,下面給出對多國語言支持,這個需求的分析步驟、結果及一些參考資料。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
我們最終的目的是:在用戶當前的操作系統環境下
1、 可以正常的顯示軟件的界面
2、 用戶可以用多語言進行輸入
3、 可以從外部各種語言的外部數據進行導入
4、 可以指定某種語言環境進行輸出(可以統一爲unicode輸出)
一、多國語言問題的起因及發展
1)最初文字的保存
0x20以下的字節狀態稱爲"控制碼",一直編到了第127號,這樣計算機就可以用不同字節來存儲英語的文字了,這個方案叫做 ANSI 的"AscII"編碼,當時世界上所有的計算機都用同樣的ASCII方案來保存英文文字
2)擴展字符集
但是很多國家用的不是英文,他們的字母裏有許多是ASCII裏沒有的,爲了可以在計算機保存他們的文字,他們決定採用127號之後的空位來表示這些新的字母、符號,還加入了很多畫表格時需要用下到的橫線、豎線、交叉等形狀,一直把序號編到了最後一個狀態255。從128到255這一頁的字符集被稱"擴展字符集"。
3)各個國家的本地化編碼(例如中國的GB2312,BIG5)
4)UINICODE的出現
ISO (國際標誰化組織)的國際組織決定着手解決這個問題。他們採用的方法很簡單:廢了所有的地區性編碼方案,重新搞一個包括了地球上所有文化、所有字母和符號的編碼!他們打算叫它"Universal Multiple-Octet Coded Character Set",簡稱 UCS, 俗稱 "UNICODE"
5)從NT開始WIN系列已支持UNICODE
於是從 Windows NT 開始,MS 趁機把它們的操作系統改了一遍,把所有的核心代碼都改成了用 UNICODE 方式工作的版本,從這時開始,WINDOWS 系統終於無需要加裝各種本的語言系統,就可以顯示全世界上所有文化的字符了。
6)UTF-8解決網絡傳輸中的,大小端問題
UTF8就是每次8個位傳輸數據,而UTF16就是每次16個位,了覈對雙方對於高低位的認識是否是一致的,採用了一種很簡便的方法,就是在文本流的開始時向對方發送一個標誌符——如果之後的文本是高位在位,那就發送"FEFF",反之,則發送"FFFE"。
7)亂碼---各地區自有的編碼標準之間的衝突
而當你新建一個文本文件時,早期的記事本的編碼默認是ANSI, 如果你在ANSI的編碼輸入漢字,那麼他實際就是GB系列的編碼方式,所以不能正常顯示
二、多國語言支持需要解決哪幾方面的問題
1. 操作系統,需要支持UNICODE,目前WINDOWSXP,WIN2003都已經支持
2. 編寫的用戶界面軟件需要編譯成unicode方式
在VC中設置如下
Project->Settings->C/C++ TAB中,增加Preprocessor definitions:_UNICODE
Project->Settings->link TAB中,增加Project Options:/entry:"wWinMainCRTStartup"
C++ BULIDER中應該也有相應的編譯選項,以保證編譯出來的執行文件是支持UNICODE的輸入和輸出的,具體資料可在網上查找
編譯方式的選擇會直接決定,所有使用控件是否能支持多國語言的輸入
3. 界面顯示
需要以資源的方式來保存各種語言的用戶界面,並對資源進行動態加載
4. 用戶輸入
當應用程序是UNICODE的方式進行編譯的,則用戶的輸入都可以正常處理。
用戶所輸入的語言文字是由相應的輸入法保證的
對程序中關於用戶輸入的處理,需要修改爲,保存這些輸入的內存對象,需要以雙字節(寬字節)的方式進行保存、運算
5. 外部數據的輸入
如果外部數據是直接輸入到內存中進行操作,則需要明確輸入源的編碼方式,並在內存處理中以寬字節處理
如果外部數據是直接以複製粘貼的方式進行,因爲編譯方式保證了UNICODE,則可以不用做特殊處理
6. 數據的輸出
如果是和STB相關,請參後文對STB處理的描述
三、操作系統支持多國語言的步驟及條件
必須添加語言支持
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
必須添加語言包
有相應語言的字體,以確保編碼方式(UNICODE)能對應到顯示方式
運行的執行程序是UNICODE標準的,即前面踢到的運行程序是一UNICODE方式編譯的
三、多國語言問題在系統中的分佈
1、客戶端
以UNICODE編譯
對用戶的輸入需要以寬字節來處理
多國語言界面的製作及動態加載
2、服務端
以UNICODE編譯
四、如何進行測試
下面的網站有各種語言的文字,可從頁面種複製相應的文字,
日語取至:http://www.ruby-lang.org/ja/
韓文取至:http://www.ruby-lang.org/ko/
是否能在我們的系統中:輸入輸出,STB顯示
建立英文操作系統環境,我們的應用程序,
是否能正常的顯示界面,輸入輸出
五、參考資料
語系
http://baike.baidu.com/view/67325.htm
字符集和編碼
http://zhidao.baidu.com/question/7057627.html
漢字編碼轉換
http://game.ali213.net/thread-142937-1-1.html
UTF-8 and Unicode FAQ
http://www.linuxforum.net/books/UTF-8-Unicode.html
WINDWOS XP對多語言的支持
http://www.yesadmin.com/295/174267/index.html
WIN2000中對多國語言的支持
http://www.cndw.com/tech/server/2006040328995.asp
一步一步教你用VC純資源dll解決國際化問題
http://www.vckbase.com/document/viewdoc/?id=1567
爲軟件添加多國語言支持的經驗總結
http://i.cn.yahoo.com/cn.chaohuilin/blog/p_10/
編寫支持多國語言的程序(delphi相關,c++builder可參考)
http://www.programfan.com/article/181.html