我們通過在作業系統裡進行一些簡單的聯絡,可以加深對 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的原創文章,盡在:"汪子熙":