1. 程式人生 > >簡述字串三種編碼方式的發展及聯絡

簡述字串三種編碼方式的發展及聯絡

計算機如何處理文字?

首先我們要明白,計算機只能處理數字,如果要處理文字,必須先把文字轉換為數字才能處理。
一個位元組(1byte)=8bit,所以一個位元組能表示的最大整數是(11111111)=28-1=255如果表示更大的數必須得用更多的位元組。計算機早期是由美國人發明的,最早只有127個字元被編碼到計算機中,為什麼是127呢?其實就是大小寫英文字母(52個),0-9數字(10個),美式英語中特殊的控制符(33個)以及一些標點符號。這套編碼就是大家熟知的ASCII,它使用8位編碼。

計算機如何處理中文?

隨著計算機引入中國,我們想要用計算機處理中文,顯然一個位元組是不夠的,至少需要兩個位元組,為了避免與ASCII衝突,中國便制定了GB2312編碼用來處理中文。當然,不同的國家都會編制一套適合他們自己國語的編碼,那麼問題來了,這麼多的語言怎麼能安全地避免衝突呢?顯然是無法避免的,在多語言混合的文字中顯示出來會有亂碼。

計算機如何解決編碼亂碼問題?

為了解決這個亂碼問題,機智的程式設計師創造了一套編碼Unicode(萬國碼),Unicode把所有的語言都統一到一套編碼中。Unicode通常用兩個位元組表示一個字元,原有的英文編碼從單位元組變成雙位元組只需要把高位位元組填充0。
但如果我們寫的文字包含的內容幾乎都是英文,那麼Unicode編碼會比ASCII編碼多出一倍的儲存空間,在儲存和傳輸上十分不划算。
於是出現了針對Unicode的可變長度編碼UTF-8(8-bit Unicode Transformation Format)。
UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6位元組,常用的英文字母被編碼成一個位元組,漢字通常是3個位元組,只有很生僻的字元才會用4-6個位元組。ASCII編碼實際上就是UTF-8的一部分,所以大量只支援ASCII編碼的歷史遺留軟體可以在UTF-8上繼續工作。
畫個圖,加速對上面文字的理解。


在這裡插入圖片描述

總結

在計算機中記憶體中,我們統一使用的是Unicode編碼,當要儲存到硬碟或者傳輸的時候就會轉換成UTF-8編碼。

舉例:
我們用記事本編輯文字的時候,從文字讀取的UTF-8字元會被轉換成Unicode字元儲存到記憶體中,編輯完成之後,儲存的時候Unicod又會轉換成UTF-8儲存在檔案:
在這裡插入圖片描述
瀏覽網頁的時候,伺服器會把動態地Unicode內容轉換成UTF-8再傳輸給瀏覽器,是不是經常看到網頁的原始碼上會有類似:的資訊,之前一直不明白為什麼,其實它表示的就是該網頁正是用的UTF-8編碼!