通過在作業系統中實際操作,學習和理解 Unicode 編碼相關知識

JerryWang_汪子熙發表於2022-01-12

我們通過在作業系統裡進行一些簡單的聯絡,可以加深對 Unicode 編碼這些基礎知識的理解和記憶。

Windows10 作業系統下,新建一個記事本檔案,輸入 123ABCabc

預設的 encoding 格式為 UTF8:

使用 winhex 這款 16進位制檔案編輯器開啟該記事本檔案:

看到正文區域的 31 32 33 41 42 43 61 62 63。這些數字代表什麼含義?

UTF8 (Universal Character Set/Unicode Transformation Format) 是針對 Unicode 的一種可變長度字元編碼。它可以用來表示 Unicode 標準中的任何字元,而且其編碼中的第一個位元組仍與 ASCII 相容,使得原來處理 ASCII 字元的軟體無須或只進行少部分修改後,便可繼續使用。

ASCII 是美國標準資訊交換程式碼(American Standard Code for Information Interchange)的縮寫, 為美國英語通訊所設計。它由 128 個字元組成,包括大小寫字母、數字0-9、標點符號、非列印字元(換行符、製表符等4個)以及控制字元(退格、響鈴等)組成。

ascii 對照表可以從這個連結獲得。

其中數字 1,2,3 的 UTF8(ASCII) 編碼分別為 31,32和33:

大寫的 A B C 的 UTF8(ANSI) 編碼為 41 42 43,小寫字母為 61 62 63:

ENCODING 改成 ANSI:

winhex 中的內容不變。

記事本的 Encoding 改成 UTF8 with bom 之後:

winhex 檔案內容的前部,多了三個EF BB BF

首先,BOM 的含義是 byte order mark,BOM(byte order mark)是為 UTF-16 和 UTF-32 準備的,用於標記位元組序(byte order)。微軟在 UTF-8 中使用 BOM 是因為這樣可以把 UTF-8 和 ASCII 等編碼明確區分開。

可以把這個 EF BB BF 理解成一種特殊的標記符,用於顯式表明該檔案的編碼為 UTF-8:

https://en.wikipedia.org/wiki...

相應的,在記事本里將 encoding 改成 UTF-16(BE) 之後,檔案頭就變成了 FE FF,並且以前的 31 32 33 變成了雙位元組 00 31 00 32 00 33:

下面再試試中文。

在記事本里輸入一箇中文“汪”:
汪 UTF8

E6 B1 AA 這是漢字 汪 的三位元組 Unicode 編碼,來自網站

AA 佔一個位元組,8位:1010 1010

UTF16-LE 6A6C


3A 代表冒號:

22 代表引號:

更多Jerry的原創文章,盡在:"汪子熙":

相關文章