close

  Unicode 編碼實現了將人類使用的每一個字符(glyph)都賦與一個16進位值,其中大部份字符存在於0000 – FFFF的編碼空間,Unicode編碼位置(code point) 來標記每一個字符,例如U+0000 就用來表示C語言中的’\0’字元,亦即ASCII 中的0值。

  Unicode主要分成三個系統:使用八位元(1 byte)為一個基本單元的UTF-8;使用16位元(2 byte)為一個基本單元的UTF-16以及使用32位元(4 byte)為基本單元的UTF-32系統。

  所謂1個基本單元,指的是說一個字符(或單字元)組成的基本單元。UTF-8就是說一個單字元的基本單元為8位元,為一個位元組(byte)大小,通常英文字母與數字等ASCII字元都可用UTF-8表示,因為他們只需要7位元,只要把ASCII字元的第8位元補上0即可變成UTF-8格式的字元。

  但顯然 UTF-8 單一單元不夠表示非英文字母的字元符號,所以可以用多個單元表示大於一個基本單元的單字元,也就是用多位元組表示一個單字元,其基本單元為1位元組的UTF-8字元,所以UTF-8又稱作"多位元組編碼",因為一個UTF-8字元可包含多個位元組。

  同理UTF-16就是用2 位元組為一個單字元的基本單元,因為基本單元比UTF-8多出一個位元組,自然可以表達比較多的字元,但某些單字元仍需要兩個基本單元表達。

  最後UTF-32則是使用4個位元組為一個單字元的基本單元,所有單字元都可以用一個基本單元表示,一般又稱為寬字元,其擁有每個單字元都有一獨立的基本單元的優勢,可以方便將多字元字串一個一個字元切割處理或合併,但缺點就是有許多單字元用不到那麼多位元組,因此必需填補許多0位元,導致佔記憶體空間。

  目前,電腦系統在Windows base的機器使用的是UTF-16編碼,而LinuxMacPOSIX陣營的機器都使用UTF-8編碼;而在Web世界除了少數網站仍用ISO 8859作為預設編碼,大部份主流Web網頁都是用UTF-8編碼

  一般我們寫程式在處理電腦系統的檔案時,都會要先把系統本身的預設字串編碼Locale轉為UTF-8編碼串,但因為UTF-8編碼處理多位元組單字元不容易用編碼位置精準分割字元,所以又必需把UTF-8轉成UTF-32編碼才比較好處理多位元組的單字元。最後處理完UTF-32字元,再輸出成Locale的格式讓電腦系統呈現。

  而如果是要將結果輸出於HTML上,只需在HTML指定編碼方式再用Browser打開HTML檔案即可,不必再考慮HTML本身編碼格式。

 

2018725日星期三

arrow
arrow

    jackterrylau 發表在 痞客邦 留言(0) 人氣()