從ASCII聊起

在互聯網的世界,端與端之間傳遞的報文都是未通過編碼的字節流,每8位組成1個字節,計算機以二進制爲基礎,這是因爲使用晶體管的開合狀態表示1和0,這樣8個電晶體管就能夠組成一個字節,這正是應用層使用的最小單位——字節。html

在經過Socket進行網絡通訊的程序中,假如咱們在接收到報文時不知道經過什麼編碼才能正確解碼,最好的辦法就是用Socket讀取字節流,在確認編碼後再對這些字節流進行轉碼,不然產生解碼錯誤。咱們常見的編碼有ASCII、GB23十二、UNICODE、UTF-8等等,除此以外還有不少其餘編碼,爲何會有這麼多不一樣的編碼?網絡

ASCII編碼即American Standard Code for Information Interchange,做爲美國標準信息交換編碼,而且計算機剛開始只在美國流行,因此當時全部的計算機都使用ASCII編碼,ASCII編碼是由8比特組成,從0到127分別用於表示不一樣的字符,包括各類符號、英語字母、阿拉伯數字等,因爲128種字符只需7位便可完成編碼,因此最高位被0填充。這128個字符已經徹底知足使用英語的美國人,英語單詞能夠經過拆分紅字母后用ASCII碼錶示。編碼

後來隨着計算機的迅速發展,其餘國家相繼引入計算機,他們發現這些編碼根本不夠對他們本國文字編碼,ASCII碼一共8位,最多也只能表示256個字符,因而他們對最高位作文章,其中0-127已經被美國使用併成爲標準,爲了兼容考慮確定不能改動,剩下128-255可供使用,但很快剩下的128個編碼又被用完,如今惟一能作的就是使用兩個甚至更多個字節來表示一個字符,每一個國家都有本身的規定,因而中國編制了GB2312編碼,爲了兼容ASCII,它規定一個字節若是小於等於127則表示ASCII,若是兩個大於127的字節連在一塊兒則表示漢字,並且兩個字節的值都在必定的範圍內。通過一輪擴展後已經基本解決漢字編碼不足問題。.net

再後來不少國家都按本身規定給本身的文字編碼,對其餘國家的編碼一律不認識,狀況一度混亂。接着國際標準化組織推出UNICODE編碼,它要把全世界全部文字符號都包括進來,使用兩個字節16位對全部字符進行編碼,同時爲了保證兼容ASCII碼,低七位仍用於表示ASCII碼原來的字符。經過UNICODE確實是把世界全部字符都統一塊兒來了。設計

UNICODE編碼雖然統一了全部字符,但還存在一個問題,若是是英文字符其實用一個字節已經足夠,但使用UNICODE卻必需要搭上另一個毫無心義的字節,在網絡傳輸過程當中則意味着要多傳輸一倍無用的報文。因而引入UTF-8編碼,它屬於UNICODE的一種實現,它是一種變長的編碼方式,在UTF-8規定的實現下能夠用一個字節表示ASCII碼錶示的全部字符,避免了多餘的空間浪費。orm

除了上面幾種常見的編碼,還有不少其餘編碼,不一樣編碼指定的規則也不一樣,但基本都對ASCII作了兼容處理,能夠說ASCII是最基礎的。cdn

========廣告時間========htm

鄙人的新書《Tomcat內核設計剖析》已經在京東銷售了,有須要的朋友能夠到 item.jd.com/12185360.ht… 進行預約。感謝各位朋友。blog

爲何寫《Tomcat內核設計剖析》圖片

=========================

歡迎關注:

這裏寫圖片描述
這裏寫圖片描述
相關文章
相關標籤/搜索