close

Unicode誕生

1980年代開始,人們漸漸受到世界各地混亂的編碼系統所苦,一個有效的解決方法便是重新制定一個全新的、廣納各國各語各文字的大型編碼系統,然後用力推廣它,用它來取代與統一各國各行其事的字碼表系統。

於是有兩個組織不約而同的召集各國代表與電腦相關產業廠商,開始進行了這樣的工作,一個是「Unicode組織」,一個是「國際標準組織(ISO)」。後來這兩個組織一致體認到向全世界提供兩個互不相容又不統一的「統一字碼」系統對數位資訊發展並沒有幫助,於是兩組織開始互相合併工作成果,並互相兼容彼此的標準(還好這兩個組織的成員都認為自己背負了歷史的責任,不然當今就要有兩套互不相容的Unicode)。由於Unicode統一各種編碼並囊括所有文字,因此又被稱為「統一碼」或「萬國碼」。到了199110月,第一個版本的Unicode標準終於被公諸於世。

 

Unicode結構

Unicode所定義的字碼編號(十六進位)010FFFF總共一百多萬(1114112)個碼位,被戲稱連克林貢語都可以被收納在內。這一百多萬碼位又被切割成等量的17個區塊,這些區塊通常被稱呼為「平面」,每一個平面的用途請見下表所示:

 

平面

字碼範圍

名稱

0號平面

0000 ~ FFFF

基本多文種平面

1號平面

10000 ~ 1FFFF

多文種補充平面

2號平面

20000 ~ 2FFFF

表意文字補充平面

3號平面

30000 ~ 3FFFF

表意文字第三平面(未正式使用)

4號平面

13
號平面

40000 ~ DFFFF

(尚未使用)

14號平面

E0000 ~ EFFFF

特別用途補充平面

15號平面

F0000 ~ FFFFF

保留作為私人使用區(A)

16號平面

100000 ~ 10FFFF

保留作為私人使用區(B)

3Unicode平面分佈[14]

 

Unicode中的第0號平面是使用頻率最高的平面,被稱為「基本多文種平面」,而其他的平面使用率較低,就統稱為「輔助平面」。由於基本多文種平面最常被使用,下面再來看一下這個平面內的字碼分佈圖:

  Unicode基本多文種平面字碼分佈

2Unicode基本多文種平面字碼分佈[14]

(註:每一個格子代表256個碼位,例如34這一格代表從340034FF的碼位)

 

這兩張圖表其實大略看過就好,幾個比較值得注意的地方在這裡說明:

  1. 這個平面包含了幾乎所有語言的常用文字。

  2. 碼位07F這個範圍與原來的ASCII完全相同。

  3. 碼位D800DFFF的範圍沒有任何的字碼對應,這個範圍被保留給代理對使用,關於代理對的部份將在後面說明。

  4. FEFF這個號碼很特別,他被定義為一個特殊的空白字元,這個字元沒有寬度,不會在顯示上造成任何影響,原文稱它為:A zero-width no-break space。簡單的說就是它沒有任何的效果,它的主要作用是用來標示編碼的位元組順序(後面提到)

 

Unicode字元佔用幾個位元組?

當被問到一個Unicode字元需要佔用幾個位元組這種問題時,那些長期被Windows洗腦的程式人員通常會不假思索的回答:兩個位元組。然而看看Unicode的碼位最高達到10FFFF的數字就知道不可能在兩個位元組的空間(最高碼位為FFFF)放得下這種數字。那麼究竟一個Unicode字元佔用多少位元組呢?常見一個Unicode字元佔用兩個位元組的誤解又是怎麼來的?關於這些問題請再慢慢觀看下面的說明。

其實對於一個Unicode字元究竟佔用多少位元組這個問題的解答是:不一定,這會隨著使用的編碼方式不同而有差異。也許你會問:那麼前面不是才說了Unicode是個「統一」的字碼系統嗎?這裡說的編碼差異又是怎麼回事呢?事實上Unicode的標準只有管幾號碼對應什麼字這件事,至於這些字碼該如何組成資料、如何記錄於記憶體等儲存媒體中的事情一概不管。但是大家也不要太責怪這些標準委員們,他們光是能解決字碼收錄、合併統一、以及排序等等的問題就已經功德無量了,至於其他的事情就交給其他的人來吧!

 

 

 

 

參考資料:

 

  1. 大五碼、倚天中文 – 小木偶的網頁

    http://home.educities.edu.tw/wanker742126/asm/ap10.html

  2. 國內中文字碼之發展 – 交大資科BBS

    http://libai.math.ncu.edu.tw/~shann/Chinese/bbs97.html

  3. 王安電腦的興衰 – Jserv's blog

    http://blog.linux.org.tw/~jserv/archives/001393.html

  4. 「許功蓋」的問題 – 網管很忙

    http://203.64.20.7/lifetype126/index.php?op=ViewArticle&articleId=15&blogId=1

  5. 中文標準交換碼全字庫

    http://www.cns11643.gov.tw/AIDB/welcome.do

  6. Unicode編碼表

    http://jicheng.tw/hanzi/unicode.html

  7. 淺釋Unicode – novus

    http://novus.pixnet.net/blog/post/30371481-%E6%B7%BA%E9%87%8B-unicode

  8. 談程式碼使用的字集 – novus

    http://novus.pixnet.net/blog/post/30382414

  9. 每個軟體開發者都絕對一定要會的Unicode及字元集必備知識 – 周思博

    http://local.joelonsoftware.com/mediawiki/index.php/The_Joel_on_Software_Translation_Project:%E8%90%AC%E5%9C%8B%E7%A2%BC

  10. Unicode是用幾個位元來進行編碼? – LSS實驗室Beta

    http://lsslab.blogspot.tw/2008/03/unicode.html

  11. 非常經典的UTF-8 – Gea-Suan Lin's BLOG

    http://blog.gslin.org/archives/2013/10/01/3670/%E9%9D%9E%E5%B8%B8%E7%B6%93%E5%85%B8%E7%9A%84-utf-8/

  12. UTF-8 Everywhere

    http://www.utf8everywhere.org/

  13. 認識中文字元碼 – 中研院計算中心 曾士熊

    http://idv.sinica.edu.tw/bear/charcodes/codeindex.htm

  14. Wikipedia

    http://zh.wikipedia.org/wiki/%E5%A4%A7%E4%BA%94%E7%A2%BC

    http://zh.wikipedia.org/wiki/Unicode

    http://zh.wikipedia.org/wiki/%E8%BC%94%E5%8A%A9%E5%B9%B3%E9%9D%A2

    http://zh.wikipedia.org/wiki/UTF-32

    http://zh.wikipedia.org/wiki/UTF-16

    http://zh.wikipedia.org/wiki/UTF-8

    http://zh.wikipedia.org/wiki/UTF-7

arrow
arrow
    文章標籤
    unicode
    全站熱搜

    夜行者 發表在 痞客邦 留言(0) 人氣()