BOM — Unicode歷史沙石(之一)

I.T. 9 遊戲日誌
6 min readFeb 15, 2020

Unicode雖然係電腦界中一大好偉大嘅發明,但一個咁大型嘅project、加上人類語言本身嘅複雜性,少不免到後期先發現有一啲設計原來係幾咁憨居,但卻已經成為歷史嘅一部份。

其中一個就係Byte Order Mark,而呢隻冤魂野鬼大概仲會纏繞多十幾廿年…

Unicode編碼的兩(或三)大陣型

眾所周知,電腦係以一個byte作為最細嘅定址單位,如同一般人用十進制做運算嘅話,一個數字可以表達0–9共10種可能。時至今日,基本上1 byte都等於8 bit,幾乎冇例外,8 bit可以表示到2⁸即256種意思。所以對電腦來講,一個位就係0–255而唔係0–9。

只要1個byte,就足以表示一種西歐語言(然後中日韓呢啲方塊字嘅歷史編碼方法唔係今日要討論嘅重點,今日skip住先)。而為咗電腦系统可以同一時間處理多國文字,就喺1990年代發現咗Unicode。

一開始,Unicode編碼空間只係設計成得2¹⁶、即16個bit、亦即65536個字符 (之後有0–16個plane係後話)。噉一個有16個bit嘅數字,要記錄喺一個byte只有8 bit嘅記憶空間,應該點樣塞落去呢?

其實所謂32-bit嘅電腦,最拿手就係做32-bit整數運算 (正負21億),好自然借鑑返將整數記錄嘅方法,即係有兩種 — Little Endian或Big Endian。例如若兩個byte係0x1234的話 (以16進制表示,一個字母係4-bit),Little Endian就係先寫個位34再寫大位12,而Big Endian就係先寫12再寫34。其實電腦裏面到底用邊一隻,就係跟個Architecture而定,例如x86就係用Little Endian。

如果以2個byte嘅Little Endian編碼方式去將Unicode文字去編碼的話,呢種方法就叫UTF-16LE。如果用咗Big Endian就叫UTF-16BE。當然,現實上中其實仲有第三種叫UTF-8可能仲普遍。

賣返個廣告,關於UTF-16、UTF-8嘅詳細解釋:

噉BOM係乜?

--

--

I.T. 9 遊戲日誌
I.T. 9 遊戲日誌

Written by I.T. 9 遊戲日誌

「IT9,你的資訊真的很有用」 你好 我就係IT9 Trust me I am IT9 // fb@it9gamelog, youtube@it9gamelog

Responses (2)