【編碼】
計算機一開始發明的時候,只是用來解決數字計算的問題。後來人們發現,計算機還可以做更多的事,正所謂能力越大,責任越大。但由於計算機只識「數」,因此人們必須告訴計算機哪個數字來代表哪個特定字元。
於是除了0、1這些阿拉伯數字,像a、b、c這樣的52個字母(包括大小寫),還有一些常用的符號(例如*、#、@等)在計算機中儲存時也要使用二進位制數來表示,而具體用哪些二進位制數字表示哪個符號,理論上每個人都可以有自己的一套規則(這就叫編碼)。
【編碼表】
但大家如果想要互相溝通而不造成混亂,就必須使用相同的編碼規則。如果使用了不同的編碼規則,那就會彼此讀不懂,這就是「亂碼」的由來。
為了避免亂碼,一段世界歷史就此啟動。一開始,是美國首先出台了ascii編碼(讀音:/ˈæski/),統一規定了常用符號用哪些二進位制數來表示。
因為英文本母、數字再加上其他常用符號,也就100來個,因此使用7個位元位(最多表示128位)就夠用了,所以乙個位元組中被剩下的那個位元位就被預設為0。
再後來呢,這套編碼表傳入歐洲,才發現這128位不夠用啊。比如說法語字母上面還有注音符,這個怎麼區分?得!把最後乙個位元位也編進來吧。因此歐洲普遍使用乙個全位元組(8個位元位)進行編碼,最多可表示256位,至此,乙個位元組就用滿了!
但是前面的狀態0-127位可以共用,但從狀態128到255這一段的解釋就完全亂套了,比如135在法語,希伯來語,俄語編碼中完全是不同的符號。
當計算機漂洋過海來到中國後,問題又來了,計算機完全不認識博大精深的中文,當然也沒法顯示中文;而且乙個位元組的256位都被佔滿了,但中國有10萬多個漢字,256位連塞牙縫都不夠啊。
於是中國科學家自力更生,重寫了一張編碼表,也就是gb2312,它用2個位元組,也就是16個位元位,來表示絕大部分(65535個)常用漢字。後來,為了能顯示更多的中文,又出台了gbk標準。
不僅中國,其他國家也都搞出自己的一套編碼標準,這樣的話地球村村民咋溝通?日本人發封email給中國人,兩邊編碼表不同,顯示的都是亂碼。
為了溝通的便利,unicode(萬國碼)應運而生,這套編碼表將世界上所有的符號都納入其中。每個符號都有乙個獨一無二的編碼,現在unicode可以容納100多萬個符號,所有語言都可以互通,乙個網頁上也可以顯示多國語言。
看起來皆大歡喜。但是!問題又來了,自從英文世界吃上了unicode這口大鍋飯,為遷就一些占用位元組比較多的語言,英文也要跟著佔兩個位元組。比如要儲存a,原本00010001就可以了,現在偏得用兩個位元組:00000000 00010001才行,這樣對計算機空間儲存是種極大的浪費!
基於這個痛點,科學家們又提出了天才的想法:utf-8(8-bit unicode transformation format)。它是一種針對unicode的可變長度字元編碼,它可以使用1~4個位元組表示乙個符號,根據不同的符號而變化位元組長度,而當字元在ascii碼的範圍時,就用乙個位元組表示,所以utf-8還可以相容ascii編碼。
unicode與utf-8這種曖昧的關係一言以蔽之:unicode是記憶體編碼的規範,而utf-8是如何儲存和傳輸unicode的手段。
將上述這段波瀾壯闊、分久必合的編碼史濃縮成乙個**表示,就是:
人類語言千變萬化,我們有《新華字典》《牛津英語字典》這樣的辭書來記錄和收納。可以說,這些編碼表就是計算機世界的字典辭書,它們同樣也是人類智慧型的結晶。
字元編碼表
計算機只能識別0和1,因此人類的資訊要想能夠被計算機處理,必需轉為二進位制的0和1,編碼表就是字元與二進位制表示的對應關係表。編碼是按一定的規則將人類所能識別的符號在計算機中建立二進位制序列表示的過程。解碼是按一定的規則將計算機中的二進位制序列轉化為人類可識別的符號的過程。這個一定的規則就是規定多少...
標準ASCII編碼表
ps 若ascii碼值為十進位制數字串,在網頁中使用應在數字串前後分別加上 和 例如數字0的ascii編碼是48,則在網頁中使用的格式應為 0 ascii american standard code for information interchange,美國資訊互換標準 是基於拉丁字母的一套電腦...
標準ASCII編碼表
ascii american standard code for information interchange,美國資訊交換標準 是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代美式英語,並等同於國際標準iso iec 646。ascii首次發布於1963年,後經數次修訂,1986年定型最終版本...