全球化編碼

從C\C++\開始學編程的兄弟們確定對char這個基本類型有深入的理解。什麼\0最爲結束符,strlen和sizeof,字符串數組和char*的字符串,這部分基本上是學習C語言最早要面對的一個攔路虎。固然學習java、C#這些相對沒有歷史包袱的語言的時候,就不會感到這麼坑爹了。java

實際上,對不起各位的是,char這個類型做爲描述字符的載體,還有着其餘的問題。咱們在下面簡單說一些。(僅做爲拋磚引玉,若是有什麼缺陷,但願你們不吝賜教)編程

  1. 對於老美來講,char很完美。從char這個類型來講,在C\C++的標準中,它佔用8位,也就是最多支持256個字符,除去一個結束符,最多也就支持255個。C\C++這羣人在一開始的時候,255個足夠老美用了,就愉快的決定義了字符和一些製表符在char裏面的表現方式。這就是ASCII。這裏我多說一句,ASCII是一種編碼格式,他表示的是一個碼錶(code set)在計算機裏面的表現方法。咱們要區分清楚碼錶和編碼這二者的區別。
  2. 對象形語系來講,char不夠用。當C\C++出海了以後,到了亞洲國家,人們就發現用char表示這麼多漢字,根本就是強人所難。因此當時主要是中國、日本、韓國,各自定義了本身的碼錶和編碼,基本上都是用更多的char來表示更多的字。好比說「啊」,在GB2312中,就用0xB0(第一個字節) 0xA1(第二個字節)儲存。而且前0x00~0xFF與ASCII兼容。
  3. 對於不一樣的拉丁語系來講,char也很蛋疼。對於有重音的拉丁語系,例如à,它就須要佔用ASCII表中128--255的部分。那麼一樣的是char,一樣的值,對應不一樣的拉丁語碼錶的時候,可能就會出現不一樣的結果。
  4. 對於象形語系來講,更加蛋疼。好比中國的「啊」再GB2312下是0xB0、0xA1,那麼到了GBK下面,可能就是其餘的字,由於GBK和GB2312的碼錶和編碼都不同。

後來,你們發現了這個問題,對於一個程序,想要全球發佈,就會面臨很大的問題。因此後來人們就發明了另一種碼錶-Unicode。顧名思義,Unicode是把世界上全部的字符,都包含進來的一個超級大的碼錶。Unicode的基本思想就是,個人表裏面什麼都有,不管在任何語言的任何系統,只要支持Unicode,就能在表裏面找到想要的字符。當前Unicode使用的是UCS-2(16位的),能夠容納65535個字符,基本上也夠用了。編碼方式有utf-1六、utf-3二、utf-8。由於utf-8對以前的一些字符串函數兼容性更好,因此如今普遍使用的就是utf-8。數組

 

好了,到如今爲止,咱們一共提出了ASCII、亞洲的多字符編碼、Unicode三種大的編碼方式。那咱們要怎麼選擇,以及他們相互之間要怎麼切換哪?等我有時間再說。函數

相關文章
相關標籤/搜索