字符編碼小結

最近想要用typedArray和sharedArrayBuffer,嗯,看完文檔發現只有int、float的array,都是給數字的,那字符串咋搞? 編碼唄。 Ascii? utf-8? 這玩意兒到底搞了啥? 不清楚啊。 因此就翻了大佬們的一些博客學習了一下。html

ASCII碼

計算機裏全部信息都是拿二進制位來存的(0,1)。 因此1個字節就能夠存256種狀態。ASCII碼就把全部英文字符都劃分在了32-127之間的狀態裏。 好比A在ASCII裏就是65.學習

由於ASCII只規定到了127.只用了7位,因此規定第一位所有都爲0.編碼

Unicode

ASCII碼解決了英文字符的問題,那其餘字符咋辦? 好比法文,希臘文? 歐洲各個國家就利用了ASCII沒有用的第一位字符,本身搞了一堆體系,而後你用你的,我用個人。 因此郵件裏會出現文案亂七八糟的狀況。code

怎麼解決呢?要解決各搞各的,那就出一套統一的咯。因此就誕生了unicode。unicode給世界上全部的符號都賦予了一個編碼。htm

那unicode是怎麼容納全部字符的呢? 答案很簡單,用更多的空間。。 比起ASCII碼只用了7位,只須要一個字節,unicode可能會佔到2個、3個、4個字節,甚至更多。blog

這麼搞老美就不幹了啊,個人英文字符一個字節就夠了,你搞一套東西出來我要用加倍的空間去存,確定不划算啊。utf-8

UTF-8

爲了解決上面的問題,大佬們又搞出了一套utf-8的實現。utf-8最大的特色就是,長度不固定,老美寫的英文字符,用utf-8編碼就只要1個字節,咱寫的中文字符,就要多個字節。 而後對於1個字節的符號,第一位爲0. n個字節的符號,第一個字節的前n位都爲1,n+1位爲0.後面字節的前兩位都爲10。 因此編碼的時候,看到第一位爲1的,就數數有幾個1,有幾個就佔幾個字節。ci

好比「雙」字, unicode的值爲53CC(1001001111001100),根據上面的規則,轉成utf-8就變成111010011000111110001100。unicode

嗯,這麼一搞,你們都開心了。。文檔

參考文獻

字符編碼筆記:ASCII,Unicode 和 UTF-8

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

相關文章
相關標籤/搜索