製做表單時,爲了追求更好的用戶交互體驗,經常會有提示性的內容,好比提醒用戶字符的限制。因爲英文,中文字符的問題,涉及到編碼的轉換調整。html
計算機的早期使用者大多使用英文,而計算機則以二進制來儲存;ASCII規定128個英文字符與二進制的對應關係,一般佔據一個字節。ASCII編碼包括大寫英文,小寫英文,英文符號等256個字符。瀏覽器
隨着計算機的普及,各個國家都使用,原來的只限於英文的ASCII碼不夠用,90年代從新制定Unicode編碼,也稱爲統一碼,萬國碼。Unicode字符集 覆蓋了全部的字符,爲每一個字符進行統一編號,分配惟一的字符碼服務器
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++ } } }