2010年5月13日 星期四

什麼是UTF 8

以前電腦剛開始發展時,每一個國家都各自發展自己的文字系統,所以就會有中文系統日文系等,可是大家在發展的過程中並沒有相互參考文字在電腦裡的編碼方式,所以同一個碼在不同的地區文字系統裡並不代表同一個字,例如台灣使用big5碼大陸使用gb碼,所以台灣的big5編碼文件拿到大陸用gb編碼系統打開,就是一片亂碼,這個問題在有網際網路以後情況就變得更嚴重,所這時就有一個單位www.unicode.org,就提出一個構想,就是何不把全世界的文字作一個統一的編碼,讓全世界的電腦都可以用,如果這樣的話,就不會再發生中文的文件拿去日本的電腦打開是亂碼的情況,這就是unicode了,現在unicode編到第8代,就utf-8





================

為了讓軟體產品支援多種語系,就必須讓軟體認得各種語言的不同編碼表,但卻為軟體開發帶來更多的複雜性與不便。Unicode 是一套能夠解決這個問題的世界性編碼標準,它為每一個字元提供與作業平台、程式、語言相獨立的單一編碼。簡言之,Unicode 詳列了世界上所有使用到的字元,並且為它們各自編派一個獨立單一的號碼。Unicode 出現之前,有多達好幾百種不同的編碼系統,試圖分派這些編號,但沒有單獨一種編碼包含足夠的字元。舉例而言,歐盟就得需要數種不同編碼,以便廣納其所有語言。對於單一語言,如英文,也沒有單一種編碼可以充份表達其所有文字、標點,以及共通的專門符號。更糟的是,這些編碼系統彼此衝突,兩套編碼系統會在兩個完全不同的字元上,使用相同的編號,或反之亦然。對於有必要支援多種不同編碼的電腦系統,不同編碼或平台上的資料交換,都將面臨資料失真的風險。
Unicode 已受到產業的廣泛接受,如 Apple、HP、IBM、JustSystem、Microsoft、Oracle、SAP、Sun、Sybase、Unisys 等多家領導廠商都表明支援。Unicode 更受到 XML、Java、ECMAScript (JavaScript )、LDAP、CORBA 3.0、WML 等標準的採納。支援 Unicode 的作業系統與瀏覽器等產品也為數不少。Unicode 標準的興起,加上支援工具的推波助瀾,成為全球化軟體技術趨勢中相當顯著的光芒之一。

Unicode 的最初目標是希望採用 16 位元編碼指定超過 65,000 個字元,然而要讓現存所有軟體適應 16 位元資料,必須花費可觀的重新開發成本。Unicode 於是發展出三種不同的編碼形式 UTF-8、UTF-16 和 UTF-32,這三種格式針對同樣的共同字元加以編碼,允許相同的資料以位元組、字組或雙字組形式傳送,並且可在無資料損失下轉換成其它格式。

UTF-8 最常見於 HTML 與相關協定中。此一格式有趣的地方是原先存在於 ASCII 的字元和 UTF-8 中的同一字元,擁有同樣的的字元值。例如,A 在 ASCII 和 UTF-8 中都是 0x41。大多數現有軟體不需重新撰寫,便可使用轉換成 UTF-8 的 Unicode 字元。UTF -16 使用在需要同時考量字元存取效率和儲存空間的環境。對於一些無須考慮記憶體空間,但要求字元存取必須是固定長度且佔用單一編碼單位(single code unit)的環境,UTF-32 則是最佳的選擇。

=================================

1. UTF-8 只是編碼演算法,他用來對 UNICODE 編碼規則的字及進行編碼。
2. UNICODE 的 code point 有 256*256*256*256 個字,涵蓋全世界幾乎所有國家的語言文字,中文的部分是其中 CJK 的子區段。
3. BIG-5 是台灣地區自己的標準,他是一個簡單編碼演算法,也是一個編碼規則。
4. BIG-5 使用兩個 byte 的固定長度編碼, UTF-8 使用 1 到 4 個 byte 的浮動長度編碼 ( 例如字母 C ,在 UTF-8 只會用一個 byte ,中文字大部分會有3 個 byte , 也會有2或者4個byte的機會。 Big5 對英文字母沒有編進去 )
5. 使用 UTF-8 編碼,軟體處理文字會很方便,因為不用同時判斷到底字串哪一部分是ISO8859-1 的編碼,哪些是 Big5 ,這樣會讓軟體處理字串變的非常慢,而UTF-8 的設計,把同一個 code point 的編碼 byte stream 透過前幾個 bit的規則換算,可以讓軟體馬上知道到底這個 byte 是屬於一個 code point 編碼的第幾個 byte ,而可以很快的處理字串的單字切割,同時也讓字串的處理變的更快更有效率。 換句話說,使用 UTF-8 (應該說 UNICODE)軟體就不用在處理字串的時候去不斷的判斷,這個字是不是 Big5 或者其他編碼,這個字與其他字該怎麼切割,因為所有字都在 UNICODE 。
6. 因為顧及資料儲存體的使用要節省,同時也因為可以跟現有的電腦系統已 Byte 作為字串處理的基本單位做法相容,所以 UTF-8 目前最好的使用方法。 但是根據 ISO10646 的制定概念,如果儲存體不是考量重點的話,而且作業系統可以支援,使用UTF-16 甚至 UTF-32 是效率更好的選擇。

政府不出面整合,那是因為我們沒有能力引導, UNICODE 是國際標準,他要作到的是全世界的共同整合,而我們的 Big5 只為我們自己設計。 字碼不會混亂下去的,因為UNICODE 已經是趨勢, Windows XP 已經採用 UNICODE 作為系統的處理模式,你看到的 Big5 只是顯示的時候幫你轉的, XP 的核心根本就是使用 UNICODE 了。 現在的混亂只是因為舊的系統幾乎採用 Big5 ,為了向前相容,所以得混在一起用。 將來一定會慢慢走向 Unicode 的。

摘自:http://isochen.pixnet.net/blog/post/25668746

沒有留言:

wibiya widget