淺顯總結ASCII Unicode UTF-8的區別

若是以爲此地排版很差,歡迎訪問個人博客

淺顯總結ASCII Unicode UTF-8的區別

製做表單時,爲了追求更好的用戶交互體驗,經常會有提示性的內容,好比提醒用戶字符的限制。因爲英文,中文字符的問題,涉及到編碼的轉換調整。html

ASCII碼

計算機的早期使用者大多使用英文,而計算機則以二進制來儲存;ASCII規定128個英文字符與二進制的對應關係,一般佔據一個字節。ASCII編碼包括大寫英文,小寫英文,英文符號等256個字符。瀏覽器

Unicode編碼

隨着計算機的普及,各個國家都使用,原來的只限於英文的ASCII碼不夠用,90年代從新制定Unicode編碼,也稱爲統一碼,萬國碼。Unicode字符集 覆蓋了全部的字符,爲每一個字符進行統一編號,分配惟一的字符碼服務器

UTF-8

UTF-8是一種編碼方式,其餘的編碼方式譬如:UTF-16等等,用UTF-8爲了將Unicode裏面的英文字符爲1個字節,其餘不常見的字符(中日韓文等)用2-4個字節,主要爲了減小文件大小,方便文件的傳輸。編碼

關係

總的來講,ASCII碼是英文專屬;Unicode碼是ASCII碼的拓展,即任何語言通用;UTF-8則是對Unicode碼的編碼方式。spa

ASCII碼和Unicode碼都是字符集,不一樣的是ASCII碼和具體的編碼方案綁定一塊兒,而Unicode碼則與具體的編碼方法隔離開,即UTF-8是最爲廣泛的Unicode編碼方案。這樣,所謂ASCII碼也就成爲UTF-8的一部分了。code

雖然每一個字符在Unicode字符集中都能找到惟一肯定的編號,但決定最終字節流的是具體的字符編碼(即編碼方案是怎麼樣的)。htm

一些術語

字符集 (charset set):字符的集合,已編號的字符有序的集合blog

字符碼 (code point):字符集中每一個字符的數字編碼,好比:GBK字符集使用區位碼的方式爲每一個字符編號,定義94*94的矩形,每一個漢字放入矩形中,‘中’字放在54區第48位。字符碼就是5448內存

編碼 :將字符串轉換爲字節流字符串

解碼 :將字節流解析爲字符

字符編碼 (character encoding):將字符集中的字符碼映射爲字節流的一種具體實現方案

計算機字符編碼工做方式

計算機內存中,統一使用Unicode編碼,當保存到硬盤或傳輸時,就轉換爲UTF-8編碼

記事本編輯時候,從文件讀取UTF-8字符被轉換爲Unicode字符到內存,保存時則將Unicode轉爲UTF-8保存到文件

瀏覽網頁時候,服務器把動態生成的Unicode內容轉換爲UTF-8再傳輸到瀏覽器

表單驗證

  function getLength(str){                   //利用字符串replace方法和正則解決非英文長度問題
      return str.replace(/[^\x00-\xff]/g,'xx').length   //匹配超過ASCII碼的字符,用16進製表示的
  }
  ​
  function length(){
      var len=0;
      for(var i=0;i<text.value.length;i++){  //str.charCodeAt()返回的是ASCII碼
           if(text.value[i].charCodeAt()<0||text.value[i].charCodeAt()>255){
                     len+=2 
           }else{
                     len++
           }
      }
  }

參考資料

  1. https://www.zhihu.com/question/23374078

  2. http://www.javashuo.com/article/p-ugiiqvbe-gz.html

  3. http://www.imkevinyang.com/2010/06/%E5%85%B3%E4%BA%8E%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81%EF%BC%8C%E4%BD%A0%E6%89%80%E9%9C%80%E8%A6%81%E7%9F%A5%E9%81%93%E7%9A%84.html

相關文章
相關標籤/搜索