iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
1
自我挑戰組

計算機概論X30天系列 第 11

Day11:[計算機概論]ASCII根本不夠用!——Unicode的出現

  • 分享至 

  • xImage
  •  

▌挑戰簡介

  • 題目:計算機概論X30天

  • 挑戰內容:連續30天紀錄計算機概論、離散數學、演算法、資料結構等課程,還有自己學習程式的心得體悟。

  • 本篇性質:適合任何對程式語言有興趣的人閱讀

  • 本篇性質:純粹學習內容的紀錄,不會有太嚴謹或是流暢的說明,因此不適合認真閱讀(怕你被誤導)

▌ASCII根本不夠用

前面學過ASCII編碼中,一個字符用8bit儲存,並可以用和兩個「十六進位」的數字表示

比如說A在ASCII編碼中用「二進位」表達就是01000001(使用8bit) ,然後用「十六進位」表達就是41

十六進位的好處,就是把2進位的超長數字縮短

但是ASCII全世界可能只有美國人覺得很好,因為ASCII只能容納256個字符啊!!其他國家的語言怎麼辦!?

ASCII的每個字符只有有8bit,而每個bit有2個可能性(0or1),意味著8bit字符只有2^8=256種可能

光是裝A~Z+a~z(小寫)就已經佔據52個,然後再算上+ - * !@$%這些奇怪的符號,256就差不多佔滿了。

那其他語言,像是漢字就有10萬多個字,根本裝不進ASCII。

因此後來出現了Unicode編碼,他的野心就是將每個國家的字符裝進去

▌Unicode

  • ASCII:一個字符可以用1個byte(2個「十六進位」)表示,比如「A」可以表示為「41」
  • Unicode: 一個字符可以用2個byte(4個「十六進位)表示,比如「A」可以表示為「0041」

補充:2 byte 又可以稱為1個word

原本一個字符是8bit,現在是用16bit。

每個bit有兩種可能1or0,現在一個字符就是2^16約略是6萬多種可能,也就是說可以裝到6萬多種字符。

可是這樣很奇怪,前面說「漢字就有10萬多個字」,就算Unicode給到16bit也根本不夠用好嗎!!

因此,說Unicode有「4個」十六進位是個不精確的說法,有些字符是會用到「5個」十六進位。

其實Unicode有分許多層

第0平面:使用「4個」十六進位,專門放最常見的語言(包括abcd、「你」、「我」...還有其他語言的常見的符號)。可以容納2^16約略是6萬多種全世界最常見的符號

第1平面:開始使用「5個」十六進位,開始放一些少見的符號

  • 第0平面 U+0000 ~ U+FFFF 基本多語言平面(Basic Multilingual Plane, BMP)
  • 第1平面 U+10000 ~ U+1FFFF 多語言補充平面(Supplementary Multilingual Plane, SMP)
  • 第2平面 U+20000 ~ U+2FFFF 表意文字補充平面
  • 第3平面 U+30000 ~ U+3FFFF 表意文字第三平面

為什麼要分平面呢?因為有些字很少見,可能一輩子都不會遇到一次,如果把他們一起放在第一平面,用2byte表示就很浪費空間,因此等到有需要在佔據3byte就好了。

▌心得

  • 其實我只是想搞清楚word是什麼而已
  • Unicode應該是更複雜,我覺得我有點過度簡化。

▌參考資料


上一篇
Day10:[學習工具]我學習一門技能的流程
下一篇
Day12:[計算機概論]負數怎麼在電腦中儲存?
系列文
計算機概論X30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言