Unicode

Unicode，全稱為Unicode標準負責維護，該機構致力讓Unicode標準取代既有的字元編碼方案，因為既有方案編碼空間有限，亦不適用於多語環境。Unicode伴隨著通用字符集ISO/IEC 10646的標準而發展，同時也以書本的形式對外發表。Unicode至今仍在不斷增修，每個新版本都加入更多新的字元。目前最新的版本為2022年9月公佈的15.0.0，已經收錄超過14萬個字元等等。此外還提供視覺影象，以幫助開發者和設計師正確應用標準。Unicode備受認可，為ISO納入國際標準，成為通用字符集，即 ISO/IEC 10646。Unicode相容ISO/IEC 10646，能完整對應各個版本標準。Unicode廣泛應用於電腦軟體的國際化與本地化過程。很多新科技，如可擴充套件置標語言、Java程式語言以及現代作業系統，都採用Unicode來編碼。Unicode最普遍的編碼格式是和ASCII相容的UTF-8，以及和UCS-2相容的UTF-16。起源與發展.Unicode為解決傳統字元編碼方案的侷限而產生，例如ISO 8859-1所定義的字元雖然在不同的國家中廣泛地使用，可是在不同國家間卻經常出現不相容的情況。很多傳統的編碼方式都有共同的問題，即容許電腦處理雙語環境。Unicode編碼包含了不同寫法的字，如“ɑ／a”、“-{強／強}-”、“-{戶／戶／戸}-”。然而在漢字方面引起了一字多形的認定爭議，詳見中日韓統一表意文字。在文書處理方面，統一碼為每一個字元而非字形定義唯一的程式碼留給其他軟體來處理，例如網頁瀏覽器或是文書處理器。目前，幾乎所有電腦系統都支援基本拉丁字母，並各自支援不同的其他編碼方式。Unicode為了和它們相互相容，其首256個字元保留給ISO 8859-1所定義的字元，使既有的西歐語系文字的轉換不需特別考量；並且把大量相同的字元重複編到不同的字元碼中去，使得舊有紛雜的編碼方式得以和Unicode編碼間互相直接轉換，而不會遺失任何資訊。舉例來說，全形格式區段包含了主要的拉丁字母的全形格式，在中文、日文、以及韓文字形當中，這些字元以全形的方式來呈現，而不以常見的半形形式顯示，這對豎排文字和等寬排列文字有重要作用。在表示一個Unicode的字元時，通常會用「U+」然後緊接著一組十六進位的數字來表示這一個字元。在基本多文種平面裡的所有字元，要用四個數字；在零號平面以外的字元則需要使用五或六個數字。舊版的Unicode標準使用相近的標記方法，但卻有些微小差異：在Unicode 3.0裡使用「U-」然後緊接著八個數字，而「U+」則必須隨後緊接著四個數字。標準.位於美國加州的Unicode組織允許任何願意支付會費的公司和個人加入，其成員包含了主要的電腦軟硬體廠商，例如Adobe系統、蘋果公司、惠普、IBM、微軟、施樂等。20世紀80年代末，組成Unicode組織的商業機構，和國際合作的國際標準化組織在電腦普及和資訊國際化的前提下，分別各自成立了Unicode組織和ISO-10646工作小組。他們不久便發現對方的存在，而大家工作目的一致。1991年，Unicode Consortium與ISO/IEC JTC1/SC2同意保持Unicode碼-{表}-與ISO 10646標準保持相容並密切協調各自標準進一步的擴充套件。雖然實際上兩者的字集編碼相同，但本質上兩者確為不同的標準。Unicode 1.1對應於ISO 10646-1:1993，Unicode 3.0對應於ISO 10646-1:2000，Unicode 3.2對應於ISO 10646-2:2001，Unicode 4.0對應於ISO 10646:2003，Unicode 5.0對應於ISO 10646:2003及附錄1–3。Unicode自2.0版本開始保持了向後相容，即新的版本僅僅增加字元，原有字元不會刪除或更名。但從Unicode 14.0起，既有的區段可擴充套件或縮減，第一個擴充套件的既有區段為阿洪姆文。統一碼聯盟在1991年首次釋出了"The Unicode Standard"。Unicode的開發結合了國際標準化組織所制定的ISO/IEC 10646，即通用字符集。Unicode與ISO/IEC 10646在編碼的運作原理相同，但"The Unicode Standard"包含了更詳盡的實現資訊、涵蓋了更細節的主題，諸如位元編碼。Unicode與ISO/IEC 10646兩個標準在術語上的使用有些微的不同。Unicode的第十萬個字元於2005年引入標準。歷史.截至目前的Unicode各版本及其釋出時間如下：其中，因應2019冠狀病毒病疫情，Unicode 14.0由2021年3月延後至2021年9月釋出。Unicode的編碼和實現.大概來說，Unicode編碼系統可分為編碼方式和實現方式兩個層次。十大設計原則.《The Unicode Standard Version 6.2 – Core Specification》 文件給出了Unicode的十大設計原則：編碼方式.統一碼的編碼方式與ISO 10646的通用字符集概念相對應。目前實際應用的統一碼版本對應於UCS-2，使用16位的編碼空間。也就是每個字元佔用2個位元組。這樣理論上一共最多可以表示216個字元。基本滿足各種語言的使用。實際上目前版本的統一碼並未完全使用這16位編碼，而是保留了大量空間以作為特殊使用或將來擴充套件。上述16位統一碼字元構成基本多文種平面。最新的統一碼版本定義了16個輔助平面，兩者合起來至少需要佔據21位的編碼空間，比3位元組略少。但事實上輔助平面字元仍然佔用4位元組編碼空間，與UCS-4保持一致。未來版本會擴充到ISO 10646-1實現級別3，即涵蓋UCS-4的所有字元。UCS-4是更大而尚未填充完全的31位字符集，加上恆為0的首位，共需佔據32位，即4位元組。理論上最多能表示231個字元，完全可以涵蓋一切語言所用的符號。基本多文種平面的字元的編碼為U+hhhh，其中每個h代表一個十六進位制數字，與UCS-2編碼完全相同。而其對應的4位元組UCS-4編碼後兩個位元組一致，前兩個位元組則所有位均為0。實現方式.Unicode的實現方式不同於編碼方式。一個字元的Unicode編碼確定。但是在實際傳輸過程中，由於不同系統平臺的設計不一定一致，以及出於節省空間的目的，對Unicode編碼的實現方式有所不同。Unicode的實現方式稱為Unicode轉換格式。例如，如果一個僅包含基本7位ASCII字元的Unicode檔案，如果每個字元都使用2位元組的原Unicode編碼傳輸，其第一位元組的8位始終為0。這就造成了比較大的浪費。對於這種情況，可以使用UTF-8編碼，這是變長編碼，它將基本7位ASCII字元仍用7位編碼表示，佔用一個位元組。類似的，對未來會出現的需要4個位元組的輔助平面字元和其他UCS-4擴充字元，2位元組編碼的UTF-16也需要透過一定的演算法轉換。再如，如果直接使用與Unicode編碼一致此外Unicode的實現方式還包括UTF-7、Punycode、CESU-8、SCSU、UTF-32、GB18030等，這些實現方式有些僅在一定的國家和地區使用，有些則屬於未來的規劃方式。目前通用的實現方式是UTF-16小端序和“UTF-8”。目前輔助平面的工作主要集中在第二和第三平面的中日韓統一表意文字，因此包括GBK、GB18030、Big5等簡體中文、繁體中文、日文、韓文以及越南喃字的各種編碼與Unicode的協調性受重點關注。考慮到Unicode最終要涵蓋所有的字元。從某種意義而言，這些編碼方式也可視作Unicode的出現於其之前的既成事實的實現方式，如同ASCII及其擴充套件Latin-1一樣，後兩者的字元在16位Unicode編碼空間中的編碼第一位元組各位全為0，第二位元組編碼與原編碼完全一致。但上述東亞語言編碼與Unicode編碼的對應關係要複雜得多。Unicode字元平面對映.Unicode 將編碼空間分成 17 個平面，以 0 到 16 編號。第 0 平面中的碼點，UTF-16 會以代理對的方式來使用，而 UTF-8 則會編碼成 4 個位元組。在每個平面中，會先將相關的字符集結為區段的形式。雖然區段可以是任意大小，但會以 16 個碼點的倍數，且通常是 128 個碼點的倍數。而一份文稿中使用到的區段，可能會散佈在多個區段中。非Unicode環境.在非Unicode環境下，由於不同國家和地區採用的字符集不一致，很可能出現無法正常顯示所有字元的情況。微軟公司使用了內碼表。在這種情況下，一些非英語的歐洲語言編寫的軟體和文件很可能出現亂碼。而將內碼表設定為相應語言中文處理又會出現問題，這一情況無法避免。只有完全採用統一編碼才能徹底解決這些問題，但目前尚無法做到這一點。內碼表技術現在廣泛為各種平臺所採用。UTF-7的內碼表是65000，UTF-8的內碼表是65001。XML和Unicode.XML及其子集XHTML採用UTF-8作為標準字符集，理論上我們可以在各種支援XML標準的瀏覽器上顯示任何地區文字的網頁，只要電腦本身安裝有合適的字型即可。可以利用codice_1nnncodice_2的格式顯示特定的字元。nnn代表該字元的十進位制Unicode程式碼。如果採用十六進位制程式碼，在編碼之前加上codice_3字元即可。但部分舊版本的瀏覽器可能無法識別十六進位制程式碼。過去電腦編碼的8位標準，使每個國家都只按國家使用的字元而編定各自的編碼系統；而對於部份字元系統比較複雜的語言，如越南語，又或者東亞國家的大型字符集，都不能在8位的環境下正常顯示。只是最近才有在文字中對十六進位制的支援，那麼舊版本的瀏覽器顯示那些字元或許可能有問題——大概首先會遇到的問題只是在對於大於8位Unicode字元的顯示。解決這個問題的普遍做法仍然是將其中的十六進位制碼轉換成一個十進位制碼。也有一些字符集標準將一些常用的標誌存放在字元內碼外面，那麼你可能使用像codice_7這樣的文字標誌來表示一個長劃的情況，即使它的字元內碼已經使用，這些標準也不包含那個字元。然而部分由於Unicode版本發展原因，很多瀏覽器只能顯示UCS-2完整字符集，也即現在使用的Unicode版本中的一個小子集。下表可以檢驗您的瀏覽器如何顯示各種Unicode程式碼：一些多語言支援的網頁瀏覽器，比如Microsoft Windows系統的Internet Explorer 5.5及以上版本，以及跨平臺的瀏覽器Mozilla/Netscape 6，可以在安裝時根據需要動態地使用相應的字符集，預先安裝了合適的語言包，就可以同時顯示頁面上的各種Unicode字元。Internet Explorer 5.5還提出使用者可以在需要新字型時，即裝即用。另外的瀏覽器如Netscape Navigator 4.77，則只能顯示跟頁面編碼相應字符集中的文字。當你使用後一種瀏覽器時，你不大可能預先安裝所有的字型，即使有了字型，瀏覽器也不一定能將這些字型完全應用起來。可能遇到的情況是，這種瀏覽器只能夠顯示部分文字，因為它們是按照標準編碼，儘管理論上在相容的系統中，只要有了相應的Code2000字型，就可以正確顯示。一種變通的辦法，是將某些少見的字元，透過“名稱實體引用”的方式來使用。輸入方法.不同的作業系統，各有直接輸入Unicode字元的方法：在SGML、HTML、XML的文字中，使用字元值引用或字元實體引用表示一個Unicode字元。中文輸入法.截至2011年10月，可以使用微軟拼音2003或2007版本、倉頡輸入法第三代第五代第六代版本、鄭碼Unicode版本、海峰五筆9.3版本、新注音輸入法和VimIM輸入。日文輸入法.使用Microsoft IME 2007，可以在IME Pad找到Unicode的點選表。點選字元即可輸入。選擇字型可以預覽字元效果。其他.除了輸入法外，作業系統也會提供另外幾種方法輸入Unicode。像是Windows 2000之後的Windows系統就提供可點選的字元對映表。又或者在Microsoft Word下，按下鍵不放，使用數字鍵盤輸入0和某個字元的Unicode編碼，再鬆開鍵即可得到該字元，如會得到Unicode字元codice_8。另外，按組合鍵，Microsoft Word也會將游標前面的字元同其十六進位制的四位Unicode編碼互相轉換。參閲.