資料表示基礎:ASCII 和 Unicode

ASCII 通常使用 8 位(1 位元組)來儲存每個字元。然而,第 8 位用作校驗位,這意味著只有 7 位可用儲存每個字元。這使得 ASCII 能夠儲存總共
2^7 = 128 different values.

| 還有 擴充套件 ASCII 使用第 8 位來儲存資料,允許更大的字元集,但對於考試來說,你可能只需要瞭解 7 位奇偶校驗 ASCII |
ASCII 值可以採取多種形式
- 數字
- 字母(大寫和小寫是分開的)
- 標點符號(?/|\£$ 等)
- 非列印命令(回車、轉義、F1)
看看你的鍵盤,看看有多少個不同的鍵。一個 Windows 鍵盤應該是 104 個,傳統鍵盤是 101 個。考慮到 shift 鍵值(a,A;b,B 等),並認識到一些鍵具有重複的功能(兩個 shift 鍵,數字小鍵盤)。我們大約有 128 個鍵盤可以執行的功能。
|
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
如果你仔細觀察每個字元的 ASCII 表示,你可能會注意到一些規律。例如
| 二進位制 | 十進位制 | 十六進位制 | 字形 |
|---|---|---|---|
| 110 0001 | 97 | 61 | a |
| 110 0010 | 98 | 62 | b |
| 110 0011 | 99 | 63 | c |
如你所見,a = 97,b = 98,c = 99。這意味著如果我們知道一個字元的值,我們可以很容易地計算出後續或先前字元的值。
|
示例:ASCII 字元 不用看上面的 ASCII 表!如果我們知道字元 '5' 的 ASCII 值是 011 0101,那麼 '8' 的 ASCII 值是多少? 我們知道 '8' 是 '5' 之後的三個字元,因為 5,6,7,8。這意味著 '8' 的 ASCII 值將比 '5' 大三個。 011 0101 ASCII '5' + 011 -------- 011 1000 ASCII '8' 上面的檢查表明這是正確的值。 如果你擔心在二進位制加法中犯錯,你可以用十進位制數來處理。以 'g' 的 ASCII 值為 110 0111,那麼 'e' 是多少? 我們知道 'e' 是 'g' 之前的兩個字元,因為 e, f, g。這意味著 'e' 的 ASCII 值將比 'g' 小兩個。 64 32 16 8 4 2 1 1 1 0 0 1 1 1 = 10310 = ASCII value of 'g' 103 - 2 = 10110 64 32 16 8 4 2 1 1 1 0 0 1 0 1 = 10110 = ASCII value of 'e' |
|
練習:ASCII 不用使用參考表(考試時你不會得到它!)回答以下問題 字母 'Z' 的 ASCII 碼為 90(十進位制),字母 'X' 如何儲存? 答案 88 - 因為它是字母表中向下的第 2 個字元。
以下文字使用了多少個 ASCII '字元'? Hello Pete, ASCII rocks! 答案 27 或 26。如果你說是 23,那你錯了,因為你必須包括每行末尾的非列印字元。每行末尾需要一個 EOL 命令,新行需要一個回車符(CR),使文字如下所示: Hello Pete,[EOL][CR] ASCII rocks![EOL] |
對於拉丁字母,ASCII 通常是可以的,但是如果你想寫一些中文或印地語呢?我們需要另一種編碼方案!
|
擴充套件:編碼 ASCII 當你從文字檔案中讀取資料時,你可能需要使用 ASCII 碼。要檢視每個 ASCII 碼的含義,我們可以使用以下函式 For x = 0 To 127
Console.WriteLine("ASCII for " & x & " = " & ChrW(x))
Next
Console.ReadLine()
|
ASCII 的問題在於它只允許你表示少量的字元(對於 擴充套件 ASCII 來說大約是 128 或 256 個)。如果你住在英語國家,這可能沒問題,但如果你住在使用不同字元集的國家會怎樣?例如
你可以看到,我們很快就會遇到麻煩,因為 ASCII 不可能在只有 7 位的情況下儲存這些數十萬個額外的字元。我們使用的替代方法是 Unicode。Unicode 有多個版本,每個版本使用不同的位數來儲存資料
| 名稱 | 描述 |
|---|---|
| UTF-8 | 8 位是 Unicode 最常用的格式。字元可以使用低至 8 位,最大限度地與 ASCII 相容。但也允許可變寬度編碼擴充套件到 16、24、32、40 或 48 位,以處理更大的字元集 |
| UTF-16 | 16 位,可變寬度編碼,可以擴充套件到 32 位。 |
| UTF-32 | 32 位,固定寬度編碼。每個字元都佔用 32 位。 |
有超過一百萬個可能的字元,我們應該能夠儲存來自地球上所有語言的每個字元,看看這些示例
| 碼位 | 字形* | 字元 | UTF-16 碼元 (十六進位制) |
|---|---|---|---|
| U+007A | z | 拉丁語 小寫字母 Z | 007A |
| U+6C34 | 水 | CJK 統一表意文字-6C34(水) | 6C34 |
| U+10000 | 線形文字 B 音節 B008 A | D800, DC00 | |
| U+1D11E | 音樂符號 G 譜號 | D834, DD1E |
你可以在 維基百科 上找到更多關於 Unicode 編碼的資訊
|
練習:ASCII 和 Unicode 不用使用參考表(考試時你不會得到它!)回答以下問題 字母 'D' 的 ASCII 碼為 100 0100,字母 'G' 如何儲存? 答案 100 0111 - 因為它是字母表中向後的第 3 個字元。
字母 's' 的 ASCII 碼為 111 0011,字母 'm' 如何儲存? 答案 110 1101 - 因為它是字母表中向下的第 6 個字元。 使用 ASCII 的一個優點是什麼? 答案 Each character only takes up 8 bits, meaning that storing data in ASCII may take up less memory than unicode 使用 Unicode 比 ASCII 的一個優點是什麼? 答案 ASCII stores a much smaller character set than unicode, meaning that you are limited to the Latin character set and cannot represent characters from other languages. 7 位 ASCII 可以表示多少個不同的字元? 答案 2^7 = 128 你正在為全球使用設計一個計算機系統,你應該使用哪種字元編碼方案,為什麼? 答案 unicode as it would allow you to display non Latin character sets such as Hindi and Cyrillic |