[Other]Unicode/UTF-8的差異

[Other]Unicode/UTF-8的差異

備註:讀完這篇請記得再讀[Other]編碼補充(承上文)

由於之前常常聽到有人將這兩者混為一談,不過被問實際有什麼差異的時候也沒有辦法講的很清楚,只知道UTF-8是由Unicode改良來的,一個是固定存2 bytes,另一個是變動長度,趁著今天有fu快點來查一下兩者間的不同,我們先看一下Wiki中對UTF-8的定義:http://zh.wikipedia.org/w/index.php?title=UTF-8&variant=zh-tw

UTF-8(8 位元 Universal Character Set/Unicode Transformation Format)是一種針對 Unicode 的可變長度字元編碼。它可以用來表示 Unicode 標準中的任何字元,且其編碼中的第一個位元組仍與 ASCII 相容,這使得原來處理 ASCII 字元的軟體無須或只須做少部份修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他儲存或傳送文字的應用中,優先採用的編碼。

針對他定義所說的內容,我們可以很簡單的用文字檔來試看看,當我新增一個文字檔,這時候我檢視它的檔案大小,發現是0個位元組:

image

這時候此文字檔的預設編碼是ANSI,我先將它改成Unicode並進行存檔,再去檢視檔案大小,發現這個空的文字檔,大小變成2位元組:

image

這時候如果我在文字檔中打入123幾個數字,再看它的大小會是8個位元組;而如果我打入123衝衝衝等中英交雜的文字,發現它的大小會是14個位元組,這個測試按例中我們可以簡單證實在Unicode編碼下,不管是數字還是中文,都是2個位元組

同樣的劇情我以UTF-8來進行編碼,會發現一樣的文字內容,在UTF-8中佔了15個位元組,其中每個英文字佔1個位元組,中文佔3個位元組,而檔案存成UTF-8格式本身就需3個位元組,所以整個加起來就是15個位元組。

image

image

上面我們簡單區分一下Unicode跟UTF-8,另外看一些文章中有人提到UTF-8在處理部分特殊字元時會用到4個位元組,不過我沒有很仔細的查到底有哪些字屬於這些罕用字集,如果有好心人士知道的話請跟小弟說一下,感謝。

 

參考資料:

Unicode、UTF-8、UCS等字的意義

UTF-8 and Unicode FAQ for Unix/Linux

UTF-8, UTF-16, UTF-32 & BOM

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。