發新話題

[分享] ASCII 、DBCS 與 UNICODE

ASCII 、DBCS 與 UNICODE

在製作程式的當地化時,字串處理毫無疑問是重點。

一般熟稔的字元是 ASCII ,ASCII 是美國標準資訊交換碼 (American Standard Code for Information Interchange) 的縮寫,有時也被稱為 ANSI 字元,這是因為 ASCII 是由美國國家標準局 (American National Standards Institute) 所制定的。某些時候 ( 通常於程式開發 ) 也被稱為 ASCIIZ ,則是表示字串結尾會附加一個零值 (Zero) 字元,用以標示字串結尾,以方便處理。

ASCII 的一個字元,相當於一個位元組的大小,從 0 到 255 共可容納 256 種字元,對那些螃蟹字母的國家來說,已經足夠了。但對一些使用了象形文字為基礎的國家,像是中日韓等國家來說,自然是不敷使用。於是 DBCS 系統就應運而生了。

DBCS 是雙位元組字元系統 ( Double Byte Char Systems ) 的縮寫,DBCS 保留了標準 ANSI 字元,但將擴充 ANSI 字元挪做己用。不要被 DBCS 的名稱給騙了,它在標準 ANSI 字元是使用一個位元組,祇有當地文字才使用兩個位元組。以中文來說,Big5 的編碼方式就是 DBCS 的編碼方式。

而大部份的資源中字串都是採用國際字元集( UNICODE ),UNICODE 的標準是於 1988 年由 Apple 與 Xerox 所發起,在 1991 成立聯盟推廣。目前許多著名公司如 Adobe、Apple、Borland、Digital、IBM、Lotus、Microsoft....等都是其成員。UNICODE 統一使用二個位元組來表達一個字元,這使得文字在不同國家間做資料交換更為簡易,而要撰寫可以同時支援不同語系的程式碼,也變得可行。

這些不同字元集之間,字元的轉換有時會成為大問題,所幸對大部份使用了資源的程式來說,這並不是問題,資源採用了固定的字串格式,而能夠處理資源的程式,自然也能夠處理這些字串。

不幸地是,在您動手中文化時,有時會發現有些程式並非完全使用資源,有些 ASCII 字串會夾雜在程式中。此時,一些字串的處理問題就會浮出枱面了。

這些問題,目前並沒有完整的解決方案,更沒有完美的處理工具。一旦遇到這種問題,通常都是霸王硬上弓,強迫用 Big5 編碼的中文填上了事。因此自然就延伸出了兩個常見問題,字串的顯示不完整,及字串長度不足。

字串的顯示不完整,與字元集轉換有關,肇因於把 Big5 的字串強迫當成 ASCII 字串,雪上加霜的是 NT 與 9X 作業系統間,內部使用的字元集又不相同,NT 系統內部採用 UNICODE,9X 系統內部則採用 ANSI + DBCS ,而兩者對外提供的服務則同時採用 ANSI + Wide- Char( 其實就是 UNICODE ),這些差異使得字元集轉換更形複雜。極有可能您會發現,做出來的東西一邊可以用,另一邊卻不行。這一類的問題,除非使用除錯器除錯,並修改程式碼,不然是不太能解決的。

字串長度不足則是另一個常見的問題,這個問題倒非無解,不過目前沒有很恰當的工具,祇能手動處理,而其過程之繁瑣足以令人卻步就是了。


TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。